第三方jar包-Jackson
@Controller
@RequestMapping("json")
public class UserController {
@RequestMapping("/json1")
//思考:正常返回会走视图解析器,而json需要返回的是一个字符串
//市面上有很多第三方的jar包可以实现这个功能,jackson,只要一个简单的注解就可以实现了
//@ResponseBody,将服务端返回的对象转换为json对象响应回去;
@ResponseBody
public String json1() throws JsonProcessingException {
System.out.println("xxxxxxxxx");
//需要一个对象 jsckson对象映射器,就是一个类,使用它可以直接将对象转换为json字符串
ObjectMapper mapper=new ObjectMapper();
//创建一个对象
User user=new User("小朱",3,"女");
System.out.println(user);
//将Java对象转换为接送字符串
String str = mapper.writeValueAsString(user);
System.out.println(str);
return str;//由于使用了@ResponseBody注解,这里会将str以json格式的字符串返回,十分方便;
}
JSON乱码问题,又两种方法
- 方法一,在@RequestMapping里追加一个参数produces
@RequestMapping(value = "/json2",produces = "application/json;charset=utf-8")
@ResponseBody
public String json2() throws JsonProcessingException {
User user=new User("小朱",3,"女");
String str = new ObjectMapper().writeValueAsString(user);
return str;//由于使用了@ResponseBody注解,这里会将str以json格式的字符串返回,十分方便;
}
- 方法二,(一劳永逸),在springMVC.xml里设置
<!--注解驱动-->
<!-- <mvc:annotation-driven/>-->
<mvc:annotation-driven>
<!-- json格式乱码处理方式-->
<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 = "/json4")
@ResponseBody
public String json4() throws JsonProcessingException {
Date date=new Date();
System.out.println(date);
//发现问题,时间默认返回的json字符串变成了时间戳的格式,
String str = new ObjectMapper().writeValueAsString(date);
return str;//由于使用了@ResponseBody注解,这里会将str以json格式的字符串返回,十分方便;
}
输出为
- 我们将时间格式化,并把方法封装起来
- Controller
@RequestMapping(value = "/json5")
@ResponseBody
public String json5() throws JsonProcessingException {
//写一个日期对象
Date date=new Date();
return JsonUtils.getJson(date);
}
- Jsonutils
public class JsonUtils {
public static String getJson(Object object){
return getJson(object,"yyyy-mm-dd HH:mm:ss");
}
public static String getJson(Object object,String dataFormat){
ObjectMapper mapper=new ObjectMapper();
//1.如果不返回时间戳,所以我们要关闭它的时间戳功能
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
//2.时间格式化问题,自定日期格式对象
SimpleDateFormat simpleDateFormat=new SimpleDateFormat(dataFormat);
//3.让mapper指定时间日期格式为simpleDateFormat;
mapper.setDateFormat(simpleDateFormat);
try {
return mapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}