Java sprintboot不使用setter将一个JSON字段保存为两个Java字段
我正在使用sprintboot,我有一个类似于:Java sprintboot不使用setter将一个JSON字段保存为两个Java字段,java,Java,我正在使用sprintboot,我有一个类似于: 公共类源代码{ @NotNull @NSDash @有效标准规则 @有效标准规则 @有效标准规则 @有效标准规则 @有效标准规则 @不相容的 @不兼容雷达 @规则 @JsonDeserializer(使用=deserializer.class) 公共字符串ambian1; 公共字符串raw_ambian1; @NotNull @NSDash @有效标准规则 @有效标准规则 @有效标准规则 @不相容的 @不兼容雷达 公共字符串xebian1; 公共
公共类源代码{
@NotNull
@NSDash
@有效标准规则
@有效标准规则
@有效标准规则
@有效标准规则
@有效标准规则
@不相容的
@不兼容雷达
@规则
@JsonDeserializer(使用=deserializer.class)
公共字符串ambian1;
公共字符串raw_ambian1;
@NotNull
@NSDash
@有效标准规则
@有效标准规则
@有效标准规则
@不相容的
@不兼容雷达
公共字符串xebian1;
公共字符串raw_xebian1;
#我有100多个其他领域使用此:
}
我希望将此数据解析为固定版本,但仍保留原始版本
{“ambian1”:“a--1.1-bc.8i”,“xebian1”:“x--2.1-za.5t”,以及其他数据}
ambian1数据不能以数字开头
将有效“a--1.1-bc.8i”
将无效“1a--1.1-bc.8i”
@jsonaas
,但没有成功。我还试图使用@JsonProperty
,但我得到了错误:多个字段表示属性
公共类源代码{
@NotNull
#其他
@JsonProperty(“ambian1”);
公共字符串ambian1;
@JsonAlias(“ambian1”);
公共字符串raw_ambian1;
@NotNull
#其他
公共字符串xebian1;
#我有100多个其他领域使用此:
}
如何将json值解码为两个字段?问题不在setters中 如果您的模型中有所有公共字段,那么您根本不应该担心多个getter/setter,因为Jackson将在序列化/反序列化时自动处理它们 但是,如果您想从单个JSON属性
“data”
中为两个字段“fixData”
和“rawData”
分配相同/相似的值,则可以为这两个字段实现一个setter,并将其标记为@JsonProperty
可能还应该实现一个getter来获取特定属性“数据”
如果必须隐藏空字段,则应使用@JsonInclude
包含非空值
@JsonInclude(JsonInclude.Include.NON_NULL)
类源{
@NotNull
公共字符串数据;
@NotNull
公共字符串数据;
@JsonAlias(“另一个”)
公共字符串另一个字段;
@JsonAlias(“尚未”)
公共整数yetAnotherField;
@JsonAlias(“一个以上”)
公共场所;
@JsonProperty(“数据”)
公共void setRawData(字符串数据){
this.rawData=data;//设置为raw
this.fixData=data.replaceAll(“^(\\d+”,”“);//删除开头的数字
}
@JsonProperty(“数据”)
公共字符串getFixData(){
返回this.fixData;//获取固定的有效值
}
}
然后可以成功读取以下JSON:
String[] jsons = {
"{\"data\":\"1abc\"}",
"{\"data\":\"2abc\", \"another\":\"an\", \"yet\":100500, \"onemore\":3.14}",
"{\"data\":\"3abc\", \"anotherField\":\"2VALS\"}"
};
ObjectMapper mapper = new ObjectMapper();
for (String json: jsons) {
Source set = mapper.readValue(json, Source.class);
System.out.printf("Setter raw: '%s', input: '%s'%n", set.rawData, set.fixData);
String serialized = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(set);
System.out.println("set: " + serialized);
}
输出:
Setter raw: '1abc', input: 'abc'
set: {
"data" : "abc"
}
Setter raw: '2abc', input: 'abc'
set: {
"anotherField" : "an",
"yetAnotherField" : 100500,
"oneMoreField" : 3.14,
"data" : "abc"
}
Setter raw: '3abc', input: 'abc'
set: {
"anotherField" : "2VALS",
"data" : "abc"
}
“rawData”
或“fixData”
将不会在JSON中进行解析。这个问题看起来并不比它好,我该怎么办?@AlexRudenko如果有人帮助我使用我建议的setter,它会更好吗?