SpringMVC 自定义序列化规则

2021年7月22日 12点热度 0条评论 来源: 东京易冷

文章目录

本文讲解如何如何自定义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);
	}
}
    原文作者:东京易冷
    原文地址: https://blog.csdn.net/weixin_38229356/article/details/84075299
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。