Java 如何通过一个POJO处理不同的数据
我试图为不同的JSON数据创建一个POJO。有没有办法只通过一个类来实现这一点?不写序列化程序和反序列化程序 结果两例:Java 如何通过一个POJO处理不同的数据,java,serialization,deserialization,Java,Serialization,Deserialization,我试图为不同的JSON数据创建一个POJO。有没有办法只通过一个类来实现这一点?不写序列化程序和反序列化程序 结果两例: { "results": ["24","0","18","34","27"] } 结果提示示例: { "results": [ { "value": "2|2|5" }
{ "results": ["24","0","18","34","27"] }
结果提示示例:
{
"results": [
{
"value": "2|2|5"
},
{
"value": "2|3|4",
"multiplier": 25
},
{
"value": "2|3|5"
},
{
"value": "2|3|4",
"multiplier": 50
},
{
"value": "1|1|4"
},
{
"value": "3|6|6",
"multiplier": 30
}
]
}
我所尝试的:
基本结果
public class BaseResult { }
结果音
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResultOne extends BaseResult {
// {"value":"2|6|6","multiplier":25}
// or
// {"value":"4|4|4"}
private String value;
private Integer multiplier;
}
结果二
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResultTwo extends BaseResult {
private String result;
}
结果三聚体
public class ResultSerializer extends StdSerializer<BaseResult> {
public ResultSerializer(Class<BaseResult> t) {
super(t);
}
@Override
public void serialize(
BaseResult value, JsonGenerator gen, SerializerProvider arg2)
throws IOException {
if(value instanceof ResultTwo){
ResultTwo result = (ResultTwo)value;
gen.writeString(result.getResult());
}else if(value instanceof ResultOne){
ResultOne resultOne = (ResultOne)value;
gen.writeObject(resultOne);
}else{
throw new ClassCastException("BaseResult value doesn't have any known type: " + value);
}
}
}
公共类ResultSerializer扩展了StdSerializer{
公共结果采集器(t类){
超级(t);
}
@凌驾
公共无效序列化(
BaseResult值,JsonGenerator gen,SerializerProvider arg2)
抛出IOException{
if(ResultTwo的值实例){
结果两个结果=(结果两个)值;
gen.writeString(result.getResult());
}else if(ResultOne的值实例){
resulttone resulttone=(resulttone)值;
gen.writeObject(resultOne);
}否则{
抛出新的ClassCastException(“BaseResult值没有任何已知类型:“+value”);
}
}
}
结果去唾液酸
public class ResultDeserializer
extends StdDeserializer<BaseResult> {
public ResultDeserializer(Class<?> vc) {
super(vc);
}
@Override
public BaseResult deserialize(
JsonParser jsonparser, DeserializationContext context)
throws IOException {
String content = jsonparser.getText();
JsonNode node = jsonparser.getCodec().readTree(jsonparser);
if(node instanceof ObjectNode){
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.treeToValue(node, ResultOne.class);
}else{
ResultTwo resultTwo = new ResultTwo();
resultTwo.setResult(content);
return resultTwo;
}
}
}
公共类结果序列化程序
扩展StdDeserializer{
公共结果序列化程序(vc类){
超级(vc);
}
@凌驾
公共BaseResult反序列化(
JsonParser(JsonParser,反序列化上下文)
抛出IOException{
String content=jsonparser.getText();
JsonNode节点=jsonparser.getCodec().readTree(jsonparser);
if(ObjectNode的节点实例){
ObjectMapper ObjectMapper=新的ObjectMapper();
返回objectMapper.treeToValue(节点,ResultOne.class);
}否则{
ResultTwo ResultTwo=新结果two();
结果二、设置结果(内容);
返回结果2;
}
}
}
在父类上,我注释了以下内容:
@JsonSerialize(contentUsing = ResultSerializer.class)
@JsonDeserialize(contentUsing = ResultDeserializer.class)
private List<BaseResult> results = null;
@JsonSerialize(contentUsing=ResultSerializer.class)
@JsonDeserialize(contentUsing=ResultDeserializer.class)
私有列表结果=null;
@Kulsin-
在SpringController中,您可以使用Map作为请求主体,它可以满足您的两个请求-
@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public void testMethod(@RequestBody Map<String, Object> request) {
//access data using request reference.
}
@RequestMapping(value=“/test”,method=RequestMethod.POST,consumes=“application/json”,products=“application/json”)
公共void testMethod(@RequestBody-Map-request){
//使用请求引用访问数据。
}
您可能正在查找类结果{List Results;}
。我知道可以这样做,但我们不想使用“Object”。我们想为此创建一个POJO。