Я думаю, что вы забыли добавить @type
к вашему запросу JSON. @type
- определить тип сериализуемого ElasticDocument
.
Вот пример, который я пробовал в своем локальном система с минимальным количеством полей в классе:
ElasticDocument. java
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = Orders.class, name = "Orders"),
@JsonSubTypes.Type(value = WorkOrders.class, name = "workOrders")
})
public abstract class ElasticDocument {
private Integer docId;
private String docName;
// getters and setters
}
Заказы. java
public class Orders extends ElasticDocument{
private Integer orderId;
private String orderName;
// getters and setters
}
WorkOrders. java
public class WorkOrders extends ElasticDocument{
private Integer workOrderId;
private String workOrderName;
// getters and setters
}
StackOverflowController. java
@RestController
@RequestMapping("/api/v1")
public class StackOverflowController {
@PostMapping("/orders")
ElasticDocument createOrder(@RequestBody ElasticDocument order){
return order;
}
}
Когда я отправляю подобные данные моя конечная точка (обратите внимание, что имена атрибутов в json строчные)
{
"@type":"workOrders",
"docId":123,
"docName":"XXXX",
"orderid":45,
"ordername":"shoe",
"workorderid":324,
"workordername":"dsf"
}
Преобразовывается в ответ workOrders:
{
"@type": "workOrders",
"docId": 123,
"docName": "XXXX",
"workOrderId": 324,
"workOrderName": "dsf"
}
И когда я изменил @type
на Orders
в запросе, тогда я получу ответ заказа:
{
"@type": "Orders",
"docId": 123,
"docName": "XXXX",
"orderId": 45,
"orderName": "shoe"
}