SpringBoot 中 @RequestBody的正确使用方法

SpringBoot 中 @RequestBody的正确使用方法

 

 最近在接收一个要离职同事的工做,接手的项目是用SpringBoot搭建的,其中看到了这样的写法:java

 

[java]  view plain  copy
 
  1. @RequestMapping("doThis")  
  2. public String doThis(HttpServletRequest request,  
  3.         @RequestParam("id") Long id, // 用户ID  
  4.         @RequestParam("back_url") String back_url, // 回调地址           
  5.         @RequestBody TestEntity json_data // json数据,对于java实体类  
  6. ){//...  


  这个是一个请求映射方法,而后用浏览器输入url:http://127.0.0.1:8080/test/doThis?id=1&back_url=url&json_data={"code":2,"message":"test"}ajax

 

  在这个方法中,使用@RequestParam获取参数,而后使用@RequestBody对json格式的参数转换为Java类型spring

 

  在运行的时候发现报错:Required request body is missing编程

 

  @RequestBody的使用须要加载MappingJackson2HttpMessageConverter,可是SpringBoot的官方文档提到,这个是默认已经加载的了,并且json字符串和javabean也没有书写的错误json

 

  所以考虑到应该是请求Content-Type的问题,由于使用浏览器输入url的方式没有办法定义Content-Type,所以spring没法发现request body浏览器

 

  为了证明这个想法,本身书写一个请求类:app

 

[java]  view plain  copy
 
  1. String add_url = "http://127.0.0.1:8080/test/doThis";  
  2.    URL url = new URL(add_url);  
  3.    HttpURLConnection connection = (HttpURLConnection)url.openConnection();  
  4.    connection.setDoInput(true);  
  5.    connection.setDoOutput(true);  
  6.    connection.setRequestMethod("POST");  
  7.    connection.setUseCaches(false);  
  8.    connection.setInstanceFollowRedirects(true);  
  9.    connection.setRequestProperty("Content-Type","application/json");  
  10.    connection.connect();  
  11.    DataOutputStream out = new DataOutputStream(connection.getOutputStream());  
  12.    JSONObject obj = new JSONObject();  
  13.       
  14.    obj.put("code", -1002);       
  15.    obj.put("message", "msg");  
  16.    out.writeBytes(obj.toString());  
  17.    out.flush();  
  18.    out.close();  

  请求仍是失败,通过调试,发现须要去掉全部的@RequestParam注解才能成功ui

 

  总结:url

    一、@RequestBody须要把全部请求参数做为json解析,所以,不能包含key=value这样的写法在请求url中,全部的请求参数都是一个jsonspa

    二、直接经过浏览器输入url时,@RequestBody获取不到json对象,须要用java编程或者基于ajax的方法请求,将Content-Type设置为application/json

相关文章
相关标签/搜索