jackson使用
①@Controller和@ResponseBody配用
json
@Controller
public class UserController {@RequestMapping(value = "/json",produces = "application/json;charset=utf-8")@ResponseBody//它就不会走视图解析器,会直接返回一个字符串public String Test() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();User user = new User(1,"李澄洵","22");String str = mapper.writeValueAsString(user);return user.toString();}
}
②也可以用
@RestController来达成不会走视图解析器的作用。
@RestController
public class UserController {@RequestMapping(value = "/json")public String Test() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();User user = new User(1,"李澄洵","22");String str = mapper.writeValueAsString(user);return user.toString();}
}
其中需要注意的点有,乱码问题:
解决方法:
乱码优化解决:
<!--json乱码问题--><mvc:annotation-driven><mvc:message-converters register-defaults="true"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8"/></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="objectMapper"><bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><property name="failOnEmptyBeans" value="false"/></bean></property></bean></mvc:message-converters></mvc:annotation-driven>
返回集合
@RequestMapping(value = "/json2")@ResponseBody//它就不会走视图解析器,会直接返回一个字符串public String Test1() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();List<User> userList = new ArrayList<User>();User user1 =new User(1,"李澄洵","22");User user2 =new User(2,"张三","12");User user3 =new User(3,"李四","21");userList.add(user1);userList.add(user2);userList.add(user3);String s = mapper.writeValueAsString(userList);return s;}
注意点:
该地方需要加上@ResponseBody,或者直接把上面的@Controller改成@RestController
时间json
@RequestMapping("/json3")@ResponseBodypublic String Test2() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();Date date = new Date();//自定义日期格式SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");//ObjectMapper,时间解析后的默认格式为:Timestamp,时间戳String s = mapper.writeValueAsString(sdf.format(date));return s;}
另一种方法
@RequestMapping("/json4")@ResponseBodypublic String Test3() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();//不使用时间差的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//自定义日期格式SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");mapper.setDateFormat(sdf);Date date = new Date();//ObjectMapper,时间解析后的默认格式为:Timestamp,时间戳String s = mapper.writeValueAsString(date);return s;}
可以自己写一个工具类来对Date时间戳
package com.utils;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;import java.text.SimpleDateFormat;public class JsonUtils {public static String Utils(Object object,String dateFormat){ObjectMapper mapper = new ObjectMapper();SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);mapper.setDateFormat(sdf);try {return mapper.writeValueAsString(object);} catch (JsonProcessingException e) {e.printStackTrace();}return null;}}
重构该方法
public static String Utils(Object object){return Utils(object,"yyyy-MM-dd HH:mm:ss");
}