2016-03-08 149 views
1

我试图在Spring MVC中编写一个简单的PUT请求方法。我有以下几点:Spring MVC中的PUT请求

@RequestMapping(value = "https://stackoverflow.com/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注释,但也没有帮助。任何想法我在这里做错了将不胜感激。

回答

5

你没有告诉春天如何绑定请求中的参数nameemail。例如,通过添加一个@RequestParam

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

nameemail参数将来自该请求中的查询字符串来填充。举例来说,如果你开除到/users/1?name=Josh&[email protected]的请求,你会得到这样的回应:

User{id=1, name='Josh', email='[email protected]'} 

为了获得有关定义处理方法更深入的了解,检查出春天documentation

10

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

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

这是一个更好的做法,当谈到REST应用程序,您的网址变得更加干净和休息风格。 您甚至可以在User上添加@Valid注释并验证其属性。

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

在这里看到: enter image description here

+0

我这样做,它并没有为我工作由于某种原因,返回怪异的解析问题,当我在做与邮差查询。相反,我以'@ RequestPart'结算。 –

+0

@sosek我编辑了我的答案,并增加了你应该怎么做邮递员。 – inafalcao