我试图在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
注释,但这也没有帮助。任何想法,我在这里做错了将不胜感激。
答案 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对象具有相同的字段。
答案 1 :(得分:11)
您没有告诉spring如何绑定请求中的name
和email
参数。例如,添加@RequestParam
:
public @ResponseBody User updateUser(@PathVariable("id") long id,
@RequestParam String name,
@RequestParam String email) { ... }
name
和email
参数将从请求中的查询字符串填充。例如,如果您向/users/1?name=Josh&email=jb@ex.com
发送请求,您将收到此回复:
User{id=1, name='Josh', email='jb@ex.com'}
为了获得有关定义处理程序方法的更多信息,请查看spring documentation。