首页 文章

在REST中测试POST请求

提问于
浏览
1

我使用Postman(chrome扩展)来测试这个REST服务,我能够成功测试GET和DELETE: http://localhost:8080/mt-rest/rest/user/321 ,但不能POST,即使在提供表单数据之后 . 我得到..服务器拒绝了这个请求,因为请求实体的格式不受所请求方法所请求资源的支持 . 我在这做错了什么?

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:

在我的POST方法中,我从@RequestBody更改为@ModelAttribute,现在我得到了

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}'}

]

1 回答

  • 3

    这对我有用,我没有正确设置 Headers . -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服务器:Apache-Coyote / 1.1内容类型:application / json Transfer-Encoding:chunked日期:星期四,2014年1月23日22:17:34 GMT

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

相关问题