如何将JSON中的Java对象的实例类型发送到Java Spring-Server Post请求?

我有一个基类和三个扩展类。例如:

Baseclass:

public Baseclass {
 int id;
} 
public SubClass extends Baseclass {
 int sub1;
}
public SubClass2 extends Baseclass {
 int sub2;
}

现在我想将json文件发送到我的spring服务器,并且服务器必须检查它是SubClass类型还是SubClass2类型


    @PostMapping(value = "/test",consumes = MediaType.APPLICATION_JSON_VALUE,produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> create(@RequestBody List<Baseclass> entry);

发送JSON:

{
    "id": 1,"sub1": 1
},{
    "id": 2,"sub2": 2
}

除了基类列表之外,我尝试将它们强制转换为特定的子类。我怎样才能做到这一点?以下操作无效。

if (abc instanceof SubClass) {
                log.info("abc is instance of SubClass");
} else if (abc instanceof SubClass2) {
                log.info("abc is instance of SubClass2");
} 
xuepan2006 回答:如何将JSON中的Java对象的实例类型发送到Java Spring-Server Post请求?

如果您接受BaseClass,Spring会将您的json映射为仅BaseClass兼容,而忽略所有其他字段。因此,检查子类根本无法使用。

最简单的解决方案是将数据接受为纯文本,然后手动尝试使用GSON或类似的东西将其映射到您的模型中

new Gson().fromJson("{
    "id": 1,"sub1": 1
}",SubClass.class);

但这是处理此问题的不好方法。 您的方法需要在体系结构上进行更改。最简单的方法是将data字段引入这样的模型

{
    "id": 1,"data": {
         "key": "sub1","value": 1
     },},
public Data {
 String key;
 int value
} 

public BaseClass {
 int id;
 Data data;
} 

这样您就可以检查

if (abc.data.key.equals("sub1")) {
                log.info("abc is sub1");
} else if (abc.data.key.equals("sub1")) {
                log.info("abc is sub2");
} 

这将需要更复杂的进一步实现,但是它将起作用。

希望有帮助。

本文链接:https://www.f2er.com/2678125.html

大家都在问