spring 如何使用rest api 請求list類型和響應list類型數據(更新)

網上好多關於該類問題提問,但好像沒有好的答案,自己一直也很疑惑,今天終於在spring實戰(四次版,翻譯版),P438頁找到了答案

這個問題其實就是一個消息格式轉換的問題,spring提供了消息轉換器可以讓json和java對象之間轉換,

如果我們使用的pojo對象你會發現對象轉換正常,但是我們使用Lsit或Map作爲數據對象時候會出現415媒體類型錯誤

 

@RequsetBody和@ResponseBody其實就是兩類消息轉換器,使用指定格式對消息進行轉換

如果想自定義請求的消息轉換格式可以使用@RequestMapping(consumes="application/json")

如果想指定響應的消息轉換格式可以使用@RequestBodyMapping(produces="application/json")

或者直接使用@RestController註解,就不必爲每個方法添加@RequestBody和@ResponseBody

當然如果使用的xml格式可以使用application/xml,甚至使用*/*

測試代碼如下:


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("/rest")
public class RestApiContoller {

    @RequestMapping(value = "/api",method = RequestMethod.POST,
            produces = "application/json",
            consumes = "application/json"
    )
    public @ResponseBody
    List<String> testArrayData(@RequestBody List<String> strgs){
        return strgs;
    }
}

今天去測試了下公司代碼,公司代碼不是使用的Spring的註解規範,使用的JAX-RS的註解規範,發現該方案並不能行

折騰好長時間才搞明白,jax-rs規範有個配置<jaxrs:provider><bean ref="jsonProvider" /></jaxrs:provider>

不同集成方式可能配置形式不同,但是關鍵信息就是要配置json的provider消息轉換器,當然如果需要先關的依賴也得添加

關於CXF的JAX-RS我自己也是不是很懂,需要了解的話,可以訪問官網瞭解下:

http://cxf.apache.org/docs/jax-rs.html

其中和CXF相關的兩個java擴展協議

JAX-RS : java extension REST

JAX-WS: java extension Web Service

這兩個大致意思是我憑自己的理解猜的,哈哈!

百度下別人給的全稱:

JAX-WS:全稱是JavaTM API for XML-Based Web Services

JAX-RS :全稱是 JavaTM API for RESTful Web Services

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章