问题引入
在实际数据处理中,避免不了前端传递一个json字符串到后台或者需要将后台对象转化为一个json数据传递给前端,例如跨域请求等,所以可能会遇到转换问题,不多说,直接看代码:
添加包jackson包依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.2</version>
</dependency>
Controller
@RequestMapping(value = "jsonp-server",method = RequestMethod.GET)
@ResponseBody
public String test08(HttpServletRequest req, HttpServletResponse resp) throws JsonProcessingException {
//设置响应头
resp.setHeader("Access-control-Allow-Origin","*");
//创建jackson的核心对象:ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
Map<String, String> map = new HashMap<String, String>();
map.put("name","张三");
//1、调用objectMapper对象的writeValueAsString方法将对象转化为json对象
String json = objectMapper.writeValueAsString(map);
//2、json转对象
//其中/"是表示”"“
String json01 = "{\"name\":\"张三\",\"gender\":\"男\"}";
//调用objectMapper对象的readValue方法将json转化为对象
Map map1 = objectMapper.readValue(json01, HashMap.class);
//输出
System.out.println("map:"+map+" json:"+json);
System.out.println("map:"+map1+" json:"+json01);
//这里处理的是script标签发起跨域请求,返回的是一个js调用方法
return "getData("+json+")";
}
}
如果前端请求的是一个jsonp请求并带有callback参数
//接收callback参数
String callback = req.getParameter("callback");
//拼接
return callback+"("+json+")";