返回JSON数据格式及HttpMessageConverter

 

 使用HttpMessageConverter<T>将请求信息转换并绑定到处理方法的入参中

或将响应结果转换为对应类型的响应信息,Spring提供两种途径:

-使用@RequestBody/@ResponseBody对处理方法进行标注

-使用HttpEntity<T>/ResponseEntity<T>作为处理方法的入参或返回值

当控制器处理方法使用到@RequestBody/@ResponseBody或HttpEntity<T>/ResponseEntity<T>

spring首先会根据请求头或响应头的Accept属性选择匹配的HttpMessageConverter

进而根据参数类型或泛型类型过滤得到匹配的HttpMessageConverter

若找不到可用的HttpMessageConverter将报错

另:@RequestBody/@ResponseBody可用单独使用



 

 

 

别忘了添加jackson的jar包文件
 

package com.hous.crud.controller;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.ResponseBody;

@Controller
public class JsonController {
	
	@RequestMapping("/json")
	public String json() {
		return "json";
	}
	
	@ResponseBody
	@RequestMapping("/testJson")
	public Map<String, String> testJson() {
		Map<String, String> map = new HashMap<>();
		map.put("id", UUID.randomUUID().toString());
		map.put("lastName", "shanshanbox.com");
		
		return map;
	}
	
	@ResponseBody
	@RequestMapping("/testHttpMessageConverter")
	public String testHttpMessageConverter(@RequestBody String body) {
		System.out.println(body);
		return "shanshanbox.com " + new Date();
	}
	
	@RequestMapping("/testResponseEntity")
	public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
		byte[] body = null;
		ServletContext servletContext = session.getServletContext();
		InputStream in = servletContext.getResourceAsStream("/files/abc.txt");
		body = new byte[in.available()];
		in.read(body);
		
		HttpHeaders headers = new HttpHeaders();
		headers.add("Content-Disposition", "attachment;filename=abc.txt");
		
		HttpStatus statusCode = HttpStatus.OK;
		
		ResponseEntity<byte[]> response = new ResponseEntity<>(body, headers, statusCode);
		return response;
	}
	
}

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test json</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/scripts/jquery.js"></script>
<script type="text/javascript">
$(function(){
	$('#json').click(function(){
		var url = this.href;
		var args = {};
		$.post(url, args, function(data){
			if(data) {
				var id = data.id;
				var lastName = data.lastName;
				alert(id + ' => ' + lastName);
			}
		});
		return false;
	});
});
</script>
</head>
<body>
<a href="testJson" id="json">get json</a>
<br/><br/>
<a href="testResponseEntity" id="json">get ResponseEntity</a>
<br/><br/>
<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>
<br/><br/>
</body>
</html>

 

猜你喜欢

转载自shuizhongyue.iteye.com/blog/2296656