Himalay Majumdar
Himalay Majumdar

Reputation: 3973

Testing POST Request in REST

I am using Postman (chrome extension) to test this REST service and I am able to successfully test GET and DELETE: http://localhost:8080/mt-rest/rest/user/321, but not POST, even after giving form data. I get.. The server refused this request because the request entity is in a format not supported by the requested resource for the requested method. What am I doing wrong here?

enter image description here

@Controller
@RequestMapping("rest")
public class TestController {![enter image description here][2]

    @Autowired
    private MultitenantService service;

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    @ResponseBody
    public User getUserInfo(@PathVariable Long id) {
        return service.getUser(id);
    }

    @RequestMapping(value = "/user", method = RequestMethod.GET)
    @ResponseBody
    public List<User> getCustomers() {
        return service.getUsers();
    }

    @RequestMapping(value = "/user/{id}/todo", method = RequestMethod.GET)
    @ResponseBody
    public List<TodoItem> getTransactions(@PathVariable Long id) {
        return getUserInfo(id).getTodoItems();
    }

    @RequestMapping(value = "/user/{id}/todo", method = RequestMethod.POST)
    @ResponseBody
    public List<TodoItem> addTransaction(@PathVariable Long id, @RequestBody TodoItem todoItem) {

        User user = getUserInfo(id);
        user.getTodoItems().add(todoItem);

        service.save(user);

        return user.getTodoItems();
    }

    @RequestMapping(value = "/user/{id}/todo/{todoId}", method = RequestMethod.DELETE)
    @ResponseBody
    public User addTransaction(@PathVariable Long id, @PathVariable Long todoId) {

        User user = getUserInfo(id);

        user.deleteTodo(todoId);

        service.save(user);

        return getUserInfo(id);
    }
}

Update:

In my POST method I changed from @RequestBody to @ModelAttribute and now I am getting

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [net.tajzich.mt.domain.TodoItem] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='may not be null', propertyPath=name, rootBeanClass=class net.tajzich.mt.domain.TodoItem, messageTemplate='{javax.validation.constraints.NotNull.message}'}

]

Upvotes: 1

Views: 3100

Answers (1)

Himalay Majumdar
Himalay Majumdar

Reputation: 3973

This worked for me, I was not setting up the header properly. -H "Content-Type: application/json"

$ curl -i -X POST -d '{"version":"1","name":"Himalay","done":"false"} ' http://localhost:8080/mt-rest/rest/user/2/todo -H "Content-Type: application/json"

HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: application/json Transfer-Encoding: chunked Date: Thu, 23 Jan 2014 22:17:34 GMT

========================================================================

Upvotes: 3

Related Questions