Long类型转String,以及下划线和驼峰互转

背景
  • 新团队里有一个项目,关于出参和入参端规定是:端上传过来端是下划线标记,如:user_name,后端在Controller层用Query对象接收,然后Controller调用Service,需要将Query转成AO,所有VO出参也须转成下划线格式。
  • 我习惯于用驼峰命名,问了问小伙伴,他们有的通过get和set互换,有的通过注解实现。我自己捣鼓了一下,嘿嘿,统一配置实现了。 记录一下,万一以后用到了,可以抄自己的笔记。
单纯的Long转String
/**
 * 处理long格式精度缺失问题
 */
@Configuration
public class LongToStringJsonConfig implements WebMvcConfigurer {

    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
        converters.add(jackson2HttpMessageConverter);
    }

}
  • 在处理这一步的时候,还引发了一个导致我接口空响应的血案。这个回头再说。
驼峰和下划线的互转
@Configuration
public class ParamAutoConfiguration {
    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper mapper = builder.createXmlMapper(false).build();
        /**
         * ALWAYS 默认 null 会被序列化
         * NON_DEFAULT 属性为默认值不序列化
         * NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。
         * NON_NULL 属性为NULL 不序列化
         */
        mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);

        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        SimpleModule simpleModule =new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        mapper.registerModule(simpleModule);
        //空对象
        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

        return mapper;
    }
}
  • 如上配置之后,就可以在后端按照我自己的习惯定义为驼峰,而能接收和返回端上需要的下划线格式。 而对于一些特殊的自定义需求,比如我一个小伙伴说之前有和客户端的约定是又有驼峰又有下划线。这个需要分别单独处理
请求参数穿插了驼峰
  • 如下设置, 就能接住端上传过来的参数,一堆下划线里又有驼峰的这种场景。加上别名,端上传啥都行。
    @JsonAlias("userName")
    private String userName;
返回参数里添加驼峰
  • 如下设置,就可以将指定参数转成驼峰而不是根据统一配置转成下划线
    @JsonProperty("userName")
    private String userName;
  • 不要问为啥规定这么奇怪,侬也不知道啊。也不是说哪个规定对或是不对,就是记录一下在这样对场景下,怎么去统一妥善的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值