Spring MVC中的PUT请求

Mac*_*zyk 3 java spring spring-mvc

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

@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; 
} 
Run Code Online (Sandbox Code Playgroud)

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

User{id=1, name='null', email='null'}
Run Code Online (Sandbox Code Playgroud)

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

ina*_*cao 16

您可以接收nameemail蒙山的@RequestBody注释:

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

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

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

看这里: 在此输入图像描述


Ali*_*ani 12

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

public @ResponseBody User updateUser(@PathVariable("id") long id, 
                                     @RequestParam String name, 
                                     @RequestParam String email) { ... }
Run Code Online (Sandbox Code Playgroud)

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

User{id=1, name='Josh', email='jb@ex.com'}
Run Code Online (Sandbox Code Playgroud)

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