springMVC學習總結(四)springmvc處理json數據類型以及fastjson的使用

springMVC學習總結(四)springmvc處理json數據類型以及fastjson的使用

主要內容:
這篇文章主要是總結以前使用springmv接收json的時候遇到的問題,下面經過前臺發送ajax數據後天springmvc接收,總結springmvc接收並處理ajax的問題。ajax

注意點:
一、前臺發送ajax數據時必須設置的屬性:
contentType='application/json' 若是不設置,後臺獲取到的將是url編碼的文本,該屬性是指定發送的數據的類型爲json。
二、本文後臺使用fastjson解析jsonspring

1、後臺接收json數據以及fastjson的使用:

json對象

jspjson

function fun(){
    $.ajax({
        url:'/testAjax.action',
        data:"{'name':'xujie','age':'25'}",
        type:'POST',
        dataType:'json',
        contentType:'application/json'
    })
}

contentType:'application/json' //告訴服務器我發送的是json格式數據
dataType:'json',//告訴服務器,我要接收的是json格式數據數組

Controller服務器

直接獲取對象中的屬性

@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
public void testAjax(@RequestBody String jsonstr){
    JSONObject jsonObject = JSONObject.parseObject(jsonstr);//將json字符串轉換成json對象
    String age = (String) jsonObject.get("age");//獲取屬性
    System.out.println(age);
}

封裝到某個pojo中:

@RequestMapping(value = "/testAjax.action",method = RequestMethod.POST)
@ResponseBody
public String testAjax(@RequestBody String jsonstr){
    Person person = JSONObject.parseObject(jsonstr, Person.class);//將json字符串轉換成json對象
    System.out.println(person);
    return "200";
}

輸出
mvc

json數組

Controllerapp

@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
public void testAjax(@RequestBody String jsonstr){
    JSONArray array = JSONObject.parseArray(jsonstr);
    JSONObject jsonObject = JSONObject.parseObject(array.get(0).toString());
    String name = (String) jsonObject.get("name");
    System.out.println(name); //獲取到了第一個對象的name

}

jspjsp

function fun(){
    $.ajax({
        url:'/testAjax.action',
        data:"[{'name':'xujie','age':'25'},{'name':'yuanxiliu','age':'20'}]",
        type:'POST',
        dataType:'json',
        contentType:'application/json'
    })
}

輸出
maven

2、後臺發送json數據:

一、經過springmvc的註解@ResponseBody 示例:

List/map
Controllerpost

@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
@ResponseBody
public ArrayList<String> testRequestBody() {
    //這裏以list爲例,map跟這個同樣的
    ArrayList<String> list = new ArrayList<String>();   
    list.add("apple");
    list.add("orange");
    list.add("pea");
    return list;
}

jsp

function fun(){
    $.ajax({
        type : "post",
        dataType : "json",
        url : "/testAjax.action",
        success : function(result) {
            alert(JSON.stringify(result));
        }
    });
}

****要點:****
在我作這篇總結的時候,一直忘了一個事,致使使用@ResponseBody返回的時候,前臺一直報錯:406 (Not Acceptable) 最終發現若是使用@ResponseBody必需要添加jackson的依賴,由於springmvc在作返回的時候經過jackson去判斷返回什麼類型,我這裏用的maven因此添加依賴:

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
</dependency>

二、經過httpServletResponse的writer返回:

list:

Controller

@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
public void testAjax(HttpServletResponse response){
    ArrayList<String> list = new ArrayList<String>();
    list.add("apple");
    list.add("orange");
    list.add("pea");
    String jsonlist = JSON.toJSONString(list);
    response.getWriter().write(jsonlist);
    
}

jsp

function fun(){
    $.ajax({
        url:'/testAjax.action',
        type:'POST',
        dataType:'json',
        contentType:'application/json',
        success:function(data){
            alert(JSON.stringify(data));
        }
    })
}

map:

Controller

@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
public void testAjax(HttpServletResponse response){
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("name","xujie");
    map.put("age","23");
    String jsonlist = JSON.toJSONString(map);
    response.getWriter().write(jsonlist);
}

jsp

function fun(){
    $.ajax({
        url:'/testAjax.action',
        type:'POST',
        dataType:'json',
        contentType:'application/json',
        success:function(data){
            alert(JSON.stringify(data));
        }
    })
}

對象

@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
@ResponseBody
public void testAjax(HttpServletResponse response) throws Exception {
    Person person = new Person();
    person.setAge("23");
    person.setName("xujie");
    String string = JSON.toJSONString(person);
    response.getWriter().write(string);
}

jsp

function fun(){
    $.ajax({
        url:'/testAjax.action',
        type:'POST',
        dataType:'json',
        contentType:'application/json',
        success:function(data){
            alert(JSON.stringify(data));
        }
    })
}
相關文章
相關標籤/搜索