1. 程式人生 > 程式設計 >詳解Springboot之接收json字串的兩種方式

詳解Springboot之接收json字串的兩種方式

第一種方式、通過關鍵欄位@RequestBody,標明這個物件接收json字串。還有第二種方式,直接通過request來獲取流。在spring中,推薦使用。

程式碼地址

https://gitee.com/yellowcong/springboot-demo/tree/master/springboot-json

專案結構

其實專案裡面沒啥類容,就是一個控制器和pom.xml配置

這裡寫圖片描述

配置fastjson

新增fastjson的依賴到pom.xml中

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>${fastjson.version}</version>
</dependency>

1、通過@RequestBody 接收json

直接通過@RequestBody 的方式,直接將json的資料注入到了JSONObject裡面了。

/**
 * 建立日期:2018年4月6日<br/>
 * 程式碼建立:黃聰<br/>
 * 功能描述:通過request的方式來獲取到json資料<br/>
 * @param jsonobject 這個是阿里的 fastjson物件
 * @return
 */
@ResponseBody
@RequestMapping(value = "/json/data",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")
public String getByJSON(@RequestBody JSONObject jsonParam) {
  // 直接將json資訊打印出來
  System.out.println(jsonParam.toJSONString());

  // 將獲取的json資料封裝一層,然後在給返回
  JSONObject result = new JSONObject();
  result.put("msg","ok");
  result.put("method","json");
  result.put("data",jsonParam);

  return result.toJSONString();
}

2、通過Request獲取

通過request的物件來獲取到輸入流,然後將輸入流的資料寫入到字串裡面,最後轉化為JSON物件。

/**
 * 建立日期:2018年4月6日<br/>
 * 程式碼建立:黃聰<br/>
 * 功能描述:通過HttpServletRequest 的方式來獲取到json的資料<br/>
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(value = "/request/data",produces = "application/json;charset=UTF-8")
public String getByRequest(HttpServletRequest request) {

  //獲取到JSONObject
  JSONObject jsonParam = this.getJSONParam(request);

  // 將獲取的json資料封裝一層,然後在給返回
  JSONObject result = new JSONObject();
  result.put("msg","request");
  result.put("data",jsonParam);

  return result.toJSONString();
}

/**
 * 建立日期:2018年4月6日<br/>
 * 程式碼建立:黃聰<br/>
 * 功能描述:通過request來獲取到json資料<br/>
 * @param request
 * @return
 */
public JSONObject getJSONParam(HttpServletRequest request){
  JSONObject jsonParam = null;
  try {
    // 獲取輸入流
    BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));

    // 寫入資料到Stringbuilder
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = streamReader.readLine()) != null) {
      sb.append(line);
    }
    jsonParam = JSONObject.parseObject(sb.toString());
    // 直接將json資訊打印出來
    System.out.println(jsonParam.toJSONString());
  } catch (Exception e) {
    e.printStackTrace();
  }
  return jsonParam;
}

3、測試

測試中,我訪問了json和 request兩個類,來獲取反回的資訊,可以卡懂啊,返回的 method欄位不一樣,我這麼做是為了區分,我訪問了兩個方法,而不是一個方法,反回的Content-Typeapplication/json;charset=UTF-8

這裡寫圖片描述

參考文章

https://www.cnblogs.com/yoyotl/p/7026566.html

到此這篇關於Springboot之接收json字串的兩種方式的文章就介紹到這了,更多相關Springboot之接收json字串的兩種方式內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!