文章目录
本文讲解如何如何自定义SpringMVC的序列化规则
使用SpringBoot为例,SpringBoot默认使用Jackson作为序列化工具。通过修改Jackson配置即可自定义序列化规则。
方法1
一般需要为第三方java类实现序列化规则使用,这里以boolean转int为例(true/false->1/0),代码如下
// 1 编写自定义序列化类,实现JsonSerializer接口
public class BooleanSerializer extends JsonSerializer<Boolean> {
@Override
public void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value != null && value) {
gen.writeNumber(1);
} else {
gen.writeNumber(0);
}
}
}
// 2 测试
public class Test {
@Test
public void globalSerialize() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
BooleanSerializer serializer = new BooleanSerializer();
simpleModule.addSerializer(Boolean.class,serializer);
simpleModule.addSerializer(boolean.class,serializer);
objectMapper.registerModule(simpleModule);
// 输出 1
System.out.println(objectMapper.writeValueAsString(true));
}
}
在SpringBoot中只要将SimpleModule注册到容器中,容器会自动配置到Jackson上。全部配置代码如下,测试略
@Configuration
public class JacksonConfig {
/**
* 自定义boolean类型序列化规则
*/
static class BooleanSerializer extends JsonSerializer<Boolean> {
@Override
public void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value != null && value) {
gen.writeNumber(1);
} else {
gen.writeNumber(0);
}
}
}
@Bean
public SimpleModule simpleModule() {
SimpleModule module = new SimpleModule();
BooleanSerializer serializer = new BooleanSerializer();
module.addSerializer(Boolean.class, serializer);
module.addSerializer(boolean.class, serializer);
return module;
}
}
方法2
自定义java类使用,以User类为例
@Data
public class User {
private Integer id;
private String name;
}
// 1 自定义序列化类实现JsonSerializer接口
public static class UserSerializer extends JsonSerializer<User> {
// 假设序列化时,为每个字段增加u前缀
@Override
public void serialize(User value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField("uid", value.getId());
gen.writeStringField("uname", value.getName());
gen.writeEndObject();
}
}
// 2 通过@JsonSerialize注解指定序列化类
@JsonSerialize(using = UserSerializer.class)
public static class User {略}
// 3 测试
public class Test {
@Test
public void serializer() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
User user = new User();
user.setId(1);
user.setName("ly");
String json = objectMapper.writeValueAsString(user);
// 输出 {"uid":1,"uname":"ly"}
System.out.println(json);
}
}