Java 如何通过一个POJO处理不同的数据

Java 如何通过一个POJO处理不同的数据,java,serialization,deserialization,Java,Serialization,Deserialization,我试图为不同的JSON数据创建一个POJO。有没有办法只通过一个类来实现这一点?不写序列化程序和反序列化程序 结果两例: { "results": ["24","0","18","34","27"] } 结果提示示例: { "results": [ { "value": "2|2|5" }

我试图为不同的JSON数据创建一个POJO。有没有办法只通过一个类来实现这一点?不写序列化程序和反序列化程序

结果两例:

{ "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。