處理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數據:
請求與SpringMVC之間的訪問流程
HttpMessageConverter<T>
HttpMessageConverter<T>
是Spring3.0新添加的一個接口,負責將請求信息轉換爲一個對象(類型爲T),將對象(類型爲T)輸出爲響應信息。
使用HttpMessageConverter<T>
將請求信息轉換並綁定到處理方法的入參中或將響應結果轉爲對應類型的響應信息,Spring提供了兩種途徑:
- 使用
@RequestBody/@ResponseBody
對處理方法進行標註 - 使用
HttpEntity<T>/ResponseEntity<T>
作爲處理方法的入參或返回值
當控制器處理方法使用到@RequestBody/@ResponseBody
或HttpEntity<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