请求端JSON字段首字母为大写SpringBoot后端接收不到参数

与腾讯即时通讯IM对接、腾讯的请求格式如下:

 于是我在项目后端编写了一个实体类用来接收参数

@Data
public class ChatRoomDto implements Serializable {
    /**
     * 回调命令
     */
    private String CallbackCommand;
    /**
     * 群组号
     */
    private String GroupId;
    /**
     * 群组类型
     */
    private String Type;
    /**
     * 入群方式:Apply(申请入群);Invited(邀请入群)
     */
    private String JoinType;
    /**
     *操作者成员
     */
    private String Operator_Account;
    /**
     * 新入群成员列表
     */
    private List<NewMember> NewMemberList;

    /**
     * 毫秒级别,事件触发时间戳
     */
    private String EventTime;

    @Data
    class NewMember{
        private String Member_Account;
    }
}

Controller代码如下:

 当我用apifox调试时 发现接收的参数居然全部为null 请求的JSON数据如下:

当我debug时 接收到的参数:

 当时检查了字段是否对应、注解之类的问题 发现都没有漏的地方 翻阅资料后将实体类改成如下 则解决了这个问题 (其实可以通过map或者JSONObject接收参数、但是我觉得实体比这些方便一点 所以就一直搜了一下解决办法

通过@JsonProperty注解来解决问题  如果引用了内部类的话需要把内部类改成静态内部类,内部非静态类无法实例化

@Data
public class ChatRoomDto implements Serializable {
    /**
     * 回调命令
     */
    @JsonProperty(value = "CallbackCommand")
    private String callbackCommand;
    /**
     * 群组号
     */
    @JsonProperty(value = "GroupId")
    private String groupId;
    /**
     * 群组类型
     */
    @JsonProperty(value = "Type")
    private String type;
    /**
     * 入群方式:Apply(申请入群);Invited(邀请入群)
     */
    @JsonProperty(value = "JoinType")
    private String joinType;
    /**
     *操作者成员
     */
    @JsonProperty(value = "Operator_Account")
    private String operator_Account;
    /**
     * 新入群成员列表
     */
    @JsonProperty(value = "NewMemberList")
    private List<NewMember> newMemberList;

    /**
     * 毫秒级别,事件触发时间戳
     */
    @JsonProperty(value = "EventTime")
    private String eventTime;

    @Data
    static class NewMember{
        @JsonProperty(value = "Member_Account")
        private String member_Account;
    }
}

Spring Boot 应用中,可以使用 Jackson 库来进行 JSON 序列化和反序列化。默认情况下,Jackson 库会根据 Java 对象属性的命名规范来生成 JSON 字段名,而在 JavaScript 中,对象属性一般使用小写字母命名。 为了解决这个问题,可以使用 Jackson 库中的命名策略来改变生成的 JSON 字段名。常用的命名策略有 SnakeCase 命名策略和 KebabCase 命名策略,它们分别将属性名中的大写字母转换为下划线或短横线,并将所有单词转换为小写。这样,在序列化时生成的 JSON 字段名就会符合约定的命名规范。 具体实现方式如下: 1. 在 Spring Boot 应用的配置文件中添加以下配置,将 Jackson 库的命名策略设置为 `LOWER_CASE_WITH_UNDERSCORES`: ```yaml spring: jackson: property-naming-strategy: LOWER_CASE_WITH_UNDERSCORES ``` 2. 在需要进行序列化和反序列化的类上添加 `@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)` 注解,该注解将使用 SnakeCase 命名策略(即将属性名中的大写字母转换为小写,并添加下划线)。 ```java import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) public class MyClass { private String myField; // getter and setter } ``` 这样,在进行序列化时生成的 JSON 字段名就会符合 JavaScript 的小写命名规范。在前接收后端返回的 JSON 数据时,也不需要对字段名进行任何转换,可以直接使用小写字母的属性名。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值