gpt4 book ai didi

java - 为什么 ObjectMapper.writeValueAsString() 会用小驼峰大小写的原始属性插入奇怪的属性?

转载 作者:行者123 更新时间:2023-12-02 05:35:30 24 4
gpt4 key购买 nike

我有一个 JSON 格式的输入,例如

{
"msisdn" : "<some value>",
"currentStackType" : "<some value>",
"msisdnDestination" : "<some value>",
"ncMigrationStatus" : "<some value>",
"spid" : "<some value>",
"ncMigrationTimestamp" : "2019-01-16 18:04:26"
}

在我必须反序列化的类中,提到的 JSON 数据字段的名称与相应的 JSON 字段的名称相同。我还使用@JsonProperty注释,因为没有它们“currentStackType”、“msisdnDestination”和ObjectMapper 无法识别“ncMigrationStatus”。

调用ObjectMapper.readValue(json, <MyClassName>.class)后我注意到反序列化成功了。

但之后出于记录目的,我执行相反的操作并观察以下内容:

{
"migrationStatus": "<some value>",
"destination": "<some value>",
"migrationTimestamp": "<some value>",
"stackType": "<some value>",
"msisdn": "<some value>",
"currentStackType": "<some value>",
"msisdnDestination": "<some value>",
"ncMigrationStatus": "<some value>",
"ncMigrationTimestamp": "2019-01-16 06:04:26",
"spid": "<some value>"
}

所有以小驼峰命名的字段实际上都是用“简化”名称重复的。

除了重命名 JSON 属性之外,还有其他方法可以消除此问题吗?

我尝试设置PropertyNamingStrategy直接但没有任何改变。

我的类(class)看起来像

public class ******* {
@JsonProperty("msisdn")
@NotBlank(message = "'MSISDN' should not be blank")
private String msisdn;

@JsonProperty("currentStackType")
@NotBlank(message = "'Current Stack Type' should not be blank")
private String currentStackType;

@JsonProperty("msisdnDestination")
@NotBlank(message = "'MSISDN Destination' should not be blank")
private String msisdnDestination;

@JsonProperty("ncMigrationStatus")
@NotBlank(message = "'NC Migration Status' should not be blank")
private String ncMigrationStatus;

@JsonProperty("ncMigrationTimestamp")
@NotNull(message = "'NC Migration Timestamp' should not be null")
private Date ncMigrationTimestamp;

@JsonProperty("spid")
@NotBlank(message = "'SPID' should not be blank")
private String spid;

public *******() {
}

public void setMSISDN(String val) {
msisdn = val;
}

public String getMSISDN() {
return msisdn;
}

public void setStackType(String val) {
currentStackType = val;
}

public String getStackType() {
return currentStackType;
}

public void setDestination(String val) {
msisdnDestination = val;
}

public String getDestination() {
return msisdnDestination;
}

public void setMigrationStatus(String val) {
ncMigrationStatus = val;
}

public String getMigrationStatus() {
return ncMigrationStatus;
}

public void setMigrationTimestamp(Date val) {
ncMigrationTimestamp = val;
}

public Date getMigrationTimestamp() {
return ncMigrationTimestamp;
}

public void setSPID(String val) {
spid = val;
}

public String getSPID() {
return spid;
}
}

抱歉,我必须隐藏一些细节。

最佳答案

我找到了根本原因:setter 和 getter 方法的名称必须与模式匹配 <set/get><full name of corresponding class data member>

驼峰式大小写也必须匹配,唯一的异常(exception)是: set/get 之后的第一个字母单词必须大写。也许可以使用注释来应用一些灵 active ,但我还没有尝试过。

关于java - 为什么 ObjectMapper.writeValueAsString() 会用小驼峰大小写的原始属性插入奇怪的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56171765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com