Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将请求放入Spring MVC中_Java_Spring_Spring Mvc - Fatal编程技术网

Java 将请求放入Spring MVC中

Java 将请求放入Spring MVC中,java,spring,spring-mvc,Java,Spring,Spring Mvc,我试图在SpringMVC中编写一个简单的PUT请求方法。我得到以下信息: @RequestMapping(value = "/users/{id}", method = RequestMethod.PUT) public @ResponseBody User updateUser(@PathVariable("id") long id, String name,

我试图在SpringMVC中编写一个简单的
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'}
这显然是错误的,因为它返回以下内容:

@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
注释,但也没有帮助。任何我在这里做错的想法都将不胜感激

您没有告诉spring如何绑定请求中的
名称
电子邮件
参数。例如,通过添加
@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。

您可以收到
name
电子邮件,其中包含
@RequestBody
注释:

@RequestMapping(value = "/users/{id}", method = RequestMethod.PUT) 
public @ResponseBody User updateUser(@PathVariable("id") long id, 
                                     @RequestBody User user) {}
当涉及到REST应用程序时,这是一个更好的实践,因为您的URL变得更加干净和REST风格。 您甚至可以在
用户
上添加@Valid注释并验证其属性

在postman客户端上,您可以将
用户
作为JSON发送到请求主体上,而不是URL上。不要忘记,您的
User
类应该具有与您发送的JSON对象相同的字段

请看这里:

我这样做了,出于某种原因,它对我不起作用,在我与邮递员进行查询时返回了奇怪的解析问题。我决定改为
@RequestPart
。@sosek我编辑了我的答案,并在《邮差》中添加了你应该怎么做。