Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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 springmvc@RequestBody的工作原理_Java_Spring_Spring Mvc - Fatal编程技术网

Java springmvc@RequestBody的工作原理

Java springmvc@RequestBody的工作原理,java,spring,spring-mvc,Java,Spring,Spring Mvc,我认为@RequestBody尝试将requestparams映射到属性名注释后的对象 但如果我得到: @RequestMapping(value = "/form", method = RequestMethod.GET) public @ResponseBody Person formGet(@RequestBody Person p,ModelMap model) { return p; } 请求: http://localhost:8080/proj/home/form?id=

我认为
@RequestBody
尝试将request
params
映射到属性名注释后的对象

但如果我得到:

@RequestMapping(value = "/form", method = RequestMethod.GET)
public @ResponseBody Person formGet(@RequestBody Person p,ModelMap model) {
    return p;
}
请求:

http://localhost:8080/proj/home/form?id=2&name=asd
返回415

当我用
@RequestParam-Map-params
更改
@RequestBody-Person-p
时,一切正常:

@RequestMapping(value = "/form", method = RequestMethod.GET)
public @ResponseBody Person formGet(@RequestParam Map<String, String> params) {
        return new Person();
}
弹簧间隙
3.2.3.释放


我哪里出错了?

不,这是
@modeldattribute
的工作,而不是
@RequestBody

  • @modeldattribute
    使用相应请求参数的值填充目标对象的字段,必要时执行转换。它可以用于HTML表单生成的请求、带有参数的链接等

  • @RequestBody
    使用预配置的
    HttpMessageConverter
    s之一将请求转换为对象。它可以用于包含JSON、XML等的请求。但是,没有复制
    @modeldattribute
    行为的
    HttpMessageConverter


    • 将输入转换为bean需要:

      对JSON主体的实例使用POST或PUT请求。 在请求映射中通过“consumes”指定预期的内容tipe也很好:

      @RequestMapping(value = "/form", method = RequestMethod.POST, consumes = "application/json" )
      
      将实现HttpMessageConverter的转换器实例添加到servlet上下文(例如servlet.xml)


      很抱歉,缺少详细信息,但我希望这会有所帮助

      您是否尝试向
      人员
      添加默认构造函数?只是尝试了,没有帮助。谢谢
      @RequestMapping(value = "/form", method = RequestMethod.POST, consumes = "application/json" )
      
      <bean id="jsonConverter" 
              class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
      <property name="supportedMediaTypes" value="application/json" />
      </bean>
      
       curl -X POST  http://localhost:8080/proj/home/form -d '{"name":"asd", "id": 2}' -H 'Content-type:application/json'