类似这种参数的请求,该怎么用dto接收?

发布于 2022-09-12 03:20:58 字数 1328 浏览 42 评论 0

{
 "Data":{
 "mobile":"1222222223",
 "code":202,
 "name":"2222"
 }
}

请问接口的DTO该如何定义?

================分割线===================

DTO定义如下

@Data
public class CallbackDTO {

    private DataInfo Data;

    @Data
    public class DataInfo {
        private String mobile;
        private Integer code;
        private String name;
    }
}

报错如下

  "timestamp": 1592473738332,
    "status": 400,
    "error": "Bad Request",
    "message": "JSON parse error: Unrecognized field \"Data\" (class com.xx.xx.modules.blockchain.dto.CallbackDTO), not marked as ignorable; nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field \"Data\" (class com.xx.xx.modules.blockchain.dto.CallbackDTO), not marked as ignorable (one known property: \"data\"])\n at [Source: (PushbackInputStream); line: 2, column: 10] (through reference chain: com.xx.xx.modules.blockchain.dto.CallbackDTO[\"Data\"])",

================分割线===================
当请求参数为

{
"Data":{
"mobile":"1222222223",
"code":202,
"name":"2222"
}
}

时会报如上错误。

当请求参数为

{
 "data":{
 "mobile":"1222222223",
 "code":202,
 "name":"2222"
 }
}

时(Data首字母大小写不一样),不会报错,请问代码该如何改动?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

别把无礼当个性 2022-09-19 03:20:58
public Class InterfaceDTO {
    private DataDTO Data;
}

public Class DataDTO {
    private String mobile;
    private int code;
    private String name;
}
青丝拂面 2022-09-19 03:20:58

java中json转对象首字母大写的会默认改成小写,可能是为了java的编写规范。
全大写、首字母小写、全部小写的字段在装json字符串的时候都没有发生变化,而首字母大写的默认改成了小写。
两种方法解决:

  1. 直接在字段上方加这个注解@JsonProperty

(注意:如果是方法1需要在对应 的字段上的get set方法需要添加 @JsonIgnore 要不然无效)

@Data
public class CallbackDTO {
    @JsonProperty
    private DataInfo Data;

    @Data
    public class DataInfo {
        private String mobile;
        private Integer code;
        private String name;
    }
    
    @JsonIgnore
    public String getData() {
        return Data;
    }
    @JsonIgnore
    public void setData(DataInfo Data) {
        this.Data = Data;
    }
}

2.方法二相对简单点 @JsonProperty(value = "SName") value的值就是你要的字段名

@Data
public class CallbackDTO {
    @JsonProperty(value = "Data")
    private DataInfo Data;

    @Data
    public class DataInfo {
        private String mobile;
        private Integer code;
        private String name;
    }
    
}
勿忘初心 2022-09-19 03:20:58
public static class DataInfo
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文