Spring MVC中的PUT请求

时间:2016-03-08 21:26:27

标签: java spring spring-mvc

我试图在Spring MVC中编写一个简单的PUT请求方法。我得到了以下内容:

@RequestMapping(value = "/users/{id}", method = RequestMethod.PUT) 
public @ResponseBody User updateUser(@PathVariable("id") long id, 
                                     String name, 
                                     String email) {
        User user = repository.findOne(id);
        user.setName(name);
        user.setEmail(email);
        System.out.println(user.toString());
        repository.save(user);
        return user; 
} 

这显然是错误的,因为它返回以下内容:

User{id=1, name='null', email='null'}

我也试过了@RequestBody注释,但这也没有帮助。任何想法,我在这里做错了将不胜感激。

2 个答案:

答案 0 :(得分:16)

您可以通过name注释获得email@RequestBody

@RequestMapping(value = "/users/{id}", method = RequestMethod.PUT) 
public @ResponseBody User updateUser(@PathVariable("id") long id, 
                                     @RequestBody User user) {}

对于REST应用程序,这是一种更好的做法,因为您的URL变得更加干净和休息风格。 您甚至可以在User上添加@Valid注释并验证其属性。

在邮递员客户端上,您将User作为JSON发送到请求正文,而不是URL。不要忘记您的User类应该与您发送的JSON对象具有相同的字段。

见这里: enter image description here

答案 1 :(得分:11)

您没有告诉spring如何绑定请求中的nameemail参数。例如,添加@RequestParam

public @ResponseBody User updateUser(@PathVariable("id") long id, 
                                     @RequestParam String name, 
                                     @RequestParam String email) { ... }

nameemail参数将从请求中的查询字符串填充。例如,如果您向/users/1?name=Josh&email=jb@ex.com发送请求,您将收到此回复:

User{id=1, name='Josh', email='jb@ex.com'}

为了获得有关定义处理程序方法的更多信息,请查看spring documentation