SpringBoot前后端调用接口下划线与驼峰之间转换

1.前言

最近在开发过程中,自测自己的接口的时候,会出现一下驼峰与下划线转换问题,今天就出篇文章写下吧,顺便加深下印象

2.步骤

2.1导入maven依赖

注意:因为我的项目中引入了Redisson的依赖,所以就不用单独引入jackson依赖了(这是个坑,第一次我也踩了,大佬忽喷......)

 2.2 项目结构

GlobalAutoConfig.java

@Slf4j
@Configuration
public class GlobalAutoConfig {


    @Bean
    public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();

        SimpleModule jacksonModule = new SimpleModule();
        jacksonModule.addSerializer(Long.class, ToStringSerializer.instance);
        jacksonModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        jacksonModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
        jacksonModule.addSerializer(BigDecimal.class, ToStringSerializer.instance);

        return objectMapper
                // 时区
                .setTimeZone(TimeZone.getTimeZone(ZoneId.systemDefault()))
                // 默认的时间戳格式
                .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true)
                // 该特性决定parser是否允许JSON字符串包含非引号控制字符(值小于32的ASCII字符,包含制表符和换行符)。
                // 如果该属性关闭,则如果遇到这些字符,则会抛出异常。JSON标准说明书要求所有控制符必须使用引号,因此这是一个非标准的特性
                .configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), true)
                // 忽略不能转移的字符
                .configure(JsonReadFeature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER.mappedFeature(), true)
                // 在使用spring boot + jpa/hibernate,如果实体字段上加有FetchType.LAZY,并使用jackson序列化为json串时,会遇到SerializationFeature.FAIL_ON_EMPTY_BEANS异常
                .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
                // 忽略未知字段
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
                // 单引号处理
                .configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true)
                // 字段排序
                .configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true)
                // 失败处理
                .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
                // 引用前人写好的序列化/反序列化规则
                .registerModule(new Jdk8Module())
                .registerModule(new JavaTimeModule())
                // 自定义序列化/反序列化规则
                .registerModule(jacksonModule)
                // 输出非空字段
                .setSerializationInclusion(JsonInclude.Include.NON_NULL)
                //开启驼峰映射
                .setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
                .findAndRegisterModules();
    }
}
BaseResp.java


/**
 * 通用结果返回
 * @param <T>
 */

@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class BaseResp<T> implements Serializable {
    private Integer code;
    private String msg;
    private T data;

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @return 成功消息
     */
    public static BaseResp<Void> success(String msg) {
        return BaseResp.success(msg, null);
    }

    /**
     * 返回成功消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static <T> BaseResp<T> success(String msg, T data) {
        return new BaseResp<T>(HttpStatus.OK.value(), msg, data);
    }

    /**
     * 返回成功消息
     *
     * @param data 数据对象
     * @return 成功消息
     */
    public static <T> BaseResp<T> success(T data) {
        return BaseResp.success("success", data);
    }

    /**
     * 返回错误消息
     *
     * @return
     */
    public static BaseResp<Void> error() {
        return BaseResp.error("error");
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @return 警告消息
     */
    public static BaseResp<Void> error(String msg) {
        return BaseResp.error(msg, null);
    }

    /**
     * 返回错误消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static <T> BaseResp<T> error(String msg, T data) {
        return new BaseResp<T>(HttpStatus.INTERNAL_SERVER_ERROR.value(), msg, data);
    }

    /**
     * 返回错误消息
     *
     * @param code 状态码
     * @param msg  返回内容
     * @return 警告消息
     */
    public static BaseResp<Void> error(int code, String msg) {
        return new BaseResp<Void>(HttpStatus.INTERNAL_SERVER_ERROR.value(), msg, null);
    }

    /**
     * 返回错误消息
     *
     * @param code 状态码
     * @param msg  返回内容
     * @return 警告消息
     */
    public static <T> BaseResp<T> error(int code, String msg, T data) {
        return new BaseResp<T>(HttpStatus.INTERNAL_SERVER_ERROR.value(), msg, data);
    }
}
UserDTO.java

@Data
public class UserDTO implements Serializable {

    private String userName;

    private String name;

    private String age;
}

controller.java

/**
 * @author xiaozhou
 * @date 2023/3/10
 * <p>
 * </p>
 */
@Slf4j
@RestController
@RequestMapping("/interceptor")
public class InterController {


    @PostMapping("/test")
    public BaseResp test(@RequestBody UserDTO userDTO) {
        log.info("请求:{}", JSONUtil.toJsonStr(userDTO));
        return BaseResp.success(userDTO);
    }
}

3.效果

启动项目.....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值