SpringMVC學習筆記 | 返回JSON數據 、HttpMessageConverter

處理JSON的步驟

  • 加入jar包
  • 編寫目標方法,使其返回JSON對應的對象或集合
package com.cerr.springmvc.test;

import com.cerr.springmvc.crud.dao.EmployeeDao;
import com.cerr.springmvc.crud.entities.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Collection;
import java.util.List;

@Controller
public class SpringMVCTest1 {

    @Autowired
    private EmployeeDao employeeDao;

    @RequestMapping(value = "/testJson")
    public Collection <Employee> testJson(){
        return employeeDao.getAll();
    }
}

  • 在方法上添加@ResponseBody註解
    添加後的代碼如下:
package com.cerr.springmvc.test;

import com.cerr.springmvc.crud.dao.EmployeeDao;
import com.cerr.springmvc.crud.entities.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Collection;
import java.util.List;

@Controller
public class SpringMVCTest1 {

    @Autowired
    private EmployeeDao employeeDao;
    @ResponseBody
    @RequestMapping(value = "/testJson")
    public Collection <Employee> testJson(){
        return employeeDao.getAll();
    }
}

在瀏覽器訪問該請求後,按F12後可以查看到返回的JSON數據:

 

 
13424350-92737b7f67e4361b.png
 

 

請求與SpringMVC之間的訪問流程

 
13424350-1c522c2cbce5ec6c.png
 

HttpMessageConverter<T>

HttpMessageConverter<T>是Spring3.0新添加的一個接口,負責將請求信息轉換爲一個對象(類型爲T),將對象(類型爲T)輸出爲響應信息

使用HttpMessageConverter<T>將請求信息轉換並綁定到處理方法的入參中或將響應結果轉爲對應類型的響應信息,Spring提供了兩種途徑:

  • 使用@RequestBody/@ResponseBody對處理方法進行標註
  • 使用HttpEntity<T>/ResponseEntity<T>作爲處理方法的入參或返回值

當控制器處理方法使用到@RequestBody/@ResponseBodyHttpEntity<T>/ResponseEntity<T>時,Spring首先根據請求頭或響應頭的Accept屬性選擇匹配的HttpMessageConverter,進而根據參數類型或泛型類型的過濾得到匹配的HttpMessageConverter,若找不到可用的HttpMessageConverter將報錯。

注意:@RequestBody@ResponseBody不需要成對出現

示例:編寫一個上傳文件的例子
表單信息如下:

<%--
  Created by IntelliJ IDEA.
  User: 白菜
  Date: 2019/11/16
  Time: 23:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="testHttpMessageConverter" method="post" enctype="multipart/form-data">
        File : <input type="file" name="file" />
        Desc : <input type="text" name="desc" />
        <input type="submit" value="submit" />
    </form>
</body>
</html>

處理方法如下:

@ResponseBody
@RequestMapping("/testHttpMessageConverter")
public String testHttpMessageConverter(@RequestBody String body){
     System.out.println(body);
     return "helloworld" + new Date();
}

會將文件和描述一起在控制檯輸出,並且在web端輸出helloworld

 

 
13424350-8f200d4cadd973b2.png
 

 

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