Java在不使用setter的情况下将一个JSON字段解析为两个Java字段
我正在使用sprintboot,我有一个类似于:Java在不使用setter的情况下将一个JSON字段解析为两个Java字段,java,json,spring-boot,Java,Json,Spring Boot,我正在使用sprintboot,我有一个类似于: 公共类源代码{ #我这里有10个注释验证器 #@NotNull@反序列化程序和其他 公共字符串原始数据; #我这里有10个注释验证器 #@NotNull@反序列化程序和其他 公共字符串fix_数据; #我有100多个其他领域 } 我希望将此数据解析为固定版本,但仍保留原始版本 {“数据”:“somedata”} 数据不能以数字开头 “abc”将是有效的 “1abc”将无效 因此,我希望我的java类被解析为: 公共类源代码{ 公共字符串r
公共类源代码{
#我这里有10个注释验证器
#@NotNull@反序列化程序和其他
公共字符串原始数据;
#我这里有10个注释验证器
#@NotNull@反序列化程序和其他
公共字符串fix_数据;
#我有100多个其他领域
}
我希望将此数据解析为固定版本,但仍保留原始版本
{“数据”:“somedata”}
数据不能以数字开头
将是有效的“abc”
将无效“1abc”
公共类源代码{
公共字符串raw_data=“1abc”;
公共字符串fix_data=“abc”;
}
我试图使用@jsonaas
,但没有成功。我还试图使用@JsonProperty
,但我得到了错误:多个字段表示属性
如何将json值解码为两个字段?映射数据->原始数据,在您的方法中:
setRawData(String rawData){
this.rawData = rawData;
this.fixedData = rawData.replace("1", ""); // Whatever you do to fix it
}
您可以使用应用于构造函数的@JsonCreator来反序列化提到的JSON结构
公共类源代码{
公共字符串数据;
公共字符串数据;
@JsonCreator
公共源(@JsonProperty(“数据”)字符串数据){
this.rawData=数据;
this.fixData=data.replaceAll(“^(\\d+”,”“);//删除开头的数字
}
}
测试
String json=“{\'data\':\'1abc\'}”;
ObjectMapper mapper=新的ObjectMapper();
sourcesrc=mapper.readValue(json,Source.class);
System.out.printf(“原始:'%s',输入:'%s'%n',src.rawData,src.fixData”);
输出:
raw: '1abc', input: 'abc'
没有setter我怎么办?你为什么不使用setter?我使用其他@objects东西,当我使用setter时,我的模型不起作用,我也使用不同的类型,如字段的number和class你的示例有2个字符串,没有注释,也没有明确的示例如果我有多个值怎么办?哪多个值?所以你只需将其他值添加到构造函数中并在那里设置它们。我有一个具有100多个属性的模型。你发布了一个带有狭义上下文的问题。在初始上下文中,您得到了该问题的“复制粘贴就绪”答案。而不是说“谢谢”,你开始记住你的实际环境的细节,甚至可能意识到你的实际问题是完全不同的。比如,在一个模型中有100多个属性是一个很大的问题。你的问题需要澄清:我确实用change更新了它,你这是什么意思<代码>#我这里有10个注释验证器我没有空的反序列化器和我的同事做的许多其他定制