1 springboot 默认 json 解析方案
1.1 返回 json数据
-
实体类
-
Controller
//@Controller
@RestController
public class UserController {
@GetMapping("/getAll")
// @ResponseBody
public List<User> getAll() {
List<User> users = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(i);
user.setUsername("Mike-" + i);
user.setAddress("New York-" + i);
users.add(user);
}
return users;
}
}
1.2 HttpMessageConverter
- 将服务端返回的对象序列化成 json字符串
- 将前端传来的 json 字符串反序列化为 java 对象
- 所有的 json 生成都离不开相关的
HttpMessageConverter
- SpringMVC 自动配置了
Jackson
和Gson
的HttpMessageConverter
。springboot 又对此做了自动化的配置。所以如果用户使用 jackson 和 gson 的话,没有其他额外的配置,只需要添加依赖。
1.3 演示
- 实体类
- 自定义转换类
package com.tzb.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.text.SimpleDateFormat;
import java.util.Date;
@Configuration
public class WebMvcConfig {
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"));
converter.setObjectMapper(om);
return converter;
}
}
- Controller
//@Controller
@RestController
public class UserController {
@GetMapping("/getAll")
// @ResponseBody
public List<User> getAll() {
List<User> users = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(i);
user.setUsername("Mike-" + i);
user.setAddress("New York-" + i);
user.setBirthday(new Date());
users.add(user);
}
return users;
}
}
1.3.1 修改
- 自定义配置
@Configuration
public class WebMvcConfig {
/* @Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"));
converter.setObjectMapper(om);
return converter;
}*/
@Bean
ObjectMapper objectMapper(){
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
return om;
}
}
2 使用 Gson 处理 json
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
- Controller
//@Controller
@RestController
public class UserController {
@GetMapping("/getAll")
// @ResponseBody
public List<User> getAll() {
List<User> users = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(i);
user.setUsername("Mike-" + i);
user.setAddress("New York-" + i);
user.setBirthday(new Date());
users.add(user);
}
return users;
}
}
2.1 自定义日期格式
package com.tzb.config;
import com.google.gson.GsonBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
@Configuration
public class WebMvcConfig {
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter(){
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(new GsonBuilder().setDateFormat("yyyy/MM/dd").create());
return converter;
}
}
2.1.1 另一种方法
@Configuration
public class WebMvcConfig {
/* @Bean
GsonHttpMessageConverter gsonHttpMessageConverter(){
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(new GsonBuilder().setDateFormat("yyyy/MM/dd").create());
return converter;
}
*/
@Bean
Gson gson() {
return new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
}
}
3 fastjson
- 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.72</version>
</dependency>
@Configuration
public class WebMvcConfig {
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter conerter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd");
conerter.setFastJsonConfig(config);
return conerter;
}
}