I have a Rest Controller with a single post endpoint looking like this and I want to be able to receive two different requests with different fields:
<code> public ResponseEntity<Void> receiveIncomingRequest(@RequestBody @Valid MainIncomingRequest mainIncomingRequest) {
return ResponseEntity.ok().build();
}
</code>
<code> public ResponseEntity<Void> receiveIncomingRequest(@RequestBody @Valid MainIncomingRequest mainIncomingRequest) {
return ResponseEntity.ok().build();
}
</code>
public ResponseEntity<Void> receiveIncomingRequest(@RequestBody @Valid MainIncomingRequest mainIncomingRequest) {
return ResponseEntity.ok().build();
}
The MainIncomingRequest class looks like this and EEventType
is an Enum with two possible values (“firstItem” or “secondItem”):
<code>@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, visible = true, property = "eventType")
@JsonSubTypes({
@JsonSubTypes.Type(value = FirstItem.class, name = "firstItem"),
@JsonSubTypes.Type(value = SecondItem.class, name = "secondItem")
})
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MainIncomingRequest {
private String theId;
private EEventType eventType;
}
</code>
<code>@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, visible = true, property = "eventType")
@JsonSubTypes({
@JsonSubTypes.Type(value = FirstItem.class, name = "firstItem"),
@JsonSubTypes.Type(value = SecondItem.class, name = "secondItem")
})
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MainIncomingRequest {
private String theId;
private EEventType eventType;
}
</code>
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, visible = true, property = "eventType")
@JsonSubTypes({
@JsonSubTypes.Type(value = FirstItem.class, name = "firstItem"),
@JsonSubTypes.Type(value = SecondItem.class, name = "secondItem")
})
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MainIncomingRequest {
private String theId;
private EEventType eventType;
}
And the FirstItem
and SecondItem
classes look similar to this:
<code>@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class FirstItem extends MainIncomingRequest {
private String firstItemField;
}
</code>
<code>@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class FirstItem extends MainIncomingRequest {
private String firstItemField;
}
</code>
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class FirstItem extends MainIncomingRequest {
private String firstItemField;
}
After I make request and provide incorrect eventType
enum value I get a response like this:
<code>{
"timestamp": "2024-07-31T20:26:15",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Could not resolve type id 'firstItemaaaa' as a subtype of `com.example.jsonsubtypesproject.dto.MainIncomingRequest`: known type ids = [MainIncomingRequest, firstItem, secondItem]",
"path": "/main/incoming"
}
</code>
<code>{
"timestamp": "2024-07-31T20:26:15",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Could not resolve type id 'firstItemaaaa' as a subtype of `com.example.jsonsubtypesproject.dto.MainIncomingRequest`: known type ids = [MainIncomingRequest, firstItem, secondItem]",
"path": "/main/incoming"
}
</code>
{
"timestamp": "2024-07-31T20:26:15",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Could not resolve type id 'firstItemaaaa' as a subtype of `com.example.jsonsubtypesproject.dto.MainIncomingRequest`: known type ids = [MainIncomingRequest, firstItem, secondItem]",
"path": "/main/incoming"
}
It states there are 3 known type ids. How do I make it show only two (“firstItem” and “secondItem”) instead of also including the “MainIncomingRequest” ?