3

I am trying to POST some JSON data to RESTful spring controller. But getting "400 Bad Request" as response status.

Giving below code from the key configuration files which I am using for this:

pom.xml dependencies:

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.1.2.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
    </dependencies>

dispatcher-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <context:annotation-config />
    <context:component-scan base-package="com.lokur.controllers" />
    <mvc:annotation-driven />

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json" />
                <entry key="xml" value="text/xml" />
            </map>
        </property>
        <property name="defaultContentType" value="text/html" />
        <property name="defaultViews">
            <list>
                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
            </list>
        </property>
    </bean>

</beans>

Controller class:

package com.lokur.controllers;

import com.lokur.dto.Employee;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/employees")
public class EmployeeController {

    @RequestMapping(method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    public void saveEmployee(@RequestBody Employee employee, HttpServletResponse response) {

        System.out.println("Saving employee...");
        System.out.println("Emp ID = " + employee.getId());
        System.out.println("Emp Name = " + employee.getName());

        // Set dummy "location" for this newly created Employee resource in response header
        response.setHeader("Location", "/employees/"+employee.getId());
    }

}

Request details:

URL: http: //localhost:8081/RestfulWSPOC/employees

Method: POST

Headers: Accept: application/json

Payload:

{
    id: 300999

    name: "Akshay Lokur"

    designation: "Associate"

    department: "Tech"

    salary: 500000
}

Thanks.

2
  • Could you show the Employee class as well, and also any possible stacktrace that you are seeing? Commented May 9, 2014 at 8:27
  • @geoand: Issue resolved. Please see my answer below. Commented May 9, 2014 at 8:30

1 Answer 1

5

I got the issue:

The problem was mere syntax issue with my JSON request (had missed commas!).

I corrected it like below and it is working like a charm now:

{
    "id": 300999,
    "name": "Akshay Lokur",
    "designation": "Associate",
    "department": "Tech",
    "salary": 500000
}

Response:

201 Created

P.S.: We also need to give double quotes to "keys" in JSON!

Yippee :)

Cheers.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.