controller 返回 json 数据
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/json")
@ResponseBody
//使用@ResponseBody 注解实现将 controller 方法返回对象转换为 json 响应给客户端。
//也可以在类上直接使用 @RestController ,这样子,里面所有的方法都只会返回 json 字符串了,不用再每一个都添加@ResponseBody
public String jsonTest() throws JsonProcessingException {
// 1 创建json映射对象
ObjectMapper mapper = new ObjectMapper();
// 2 java对象解析为json字符串
User user = new User(1, "hei", 18, "nan");
String str = mapper.writeValueAsString(user);
return str;
}
}
解决返回的json数据乱码
方式一:
//produces:指定响应体返回类型和编码
@RequestMapping(value = "/json",produces = "application/json;charset=utf-8")
方式二:在 springmvc 的配置文件上添加一段消息转换配置
<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>
JSON 返回自定义时间格式
@RequestMapping("/json")
public String json() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
//不使用时间戳的方式
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//自定义日期格式对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//指定日期格式
mapper.setDateFormat(sdf);
Date date = new Date();
String str = mapper.writeValueAsString(date);
return str;
}
JSON 与 JS 对象互转
//编写一个js对象
var user = {
name : "小张",
age : 18,
sex : "男"
};
//将js对象转换为字符串
var str = JSON.stringify(user);
console.log(str);
//将字符串转换为js对象
var js = JSON.parse(str);
console.log(js);