Máme Java SpringBoot API endpoint a míjíme RequestBody z NotifyMoiChanges typu třídy. V NotifyMoiChanges model třídy máme jednu podal což je typ Rozhraní.
Endpoint úryvek :
@PostMapping("/notifyMOIChanges")
public ResponseEntity<Void> notifyMOIChangesPost(@RequestBody NotifyMoiChanges notifyMoiChanges) {
logger.info("Received notifyMOIChanges request.");
return ResponseEntity.noContent().build();
}
RequestBody Model úryvek:
public class NotifyMoiChanges {
@JsonProperty("moiChanges")
@Valid
private List<MoiChange> moiChanges = new ArrayList<MoiChange>();
..... other attributes
}
public class MoiChange {
@JsonProperty("operation")
private String operation = null; //operation value can be "Type1" or "Type2"
@JsonProperty("value")
private OneOfMoiChangeValue value = null; //value filed can be mapped with any of the OneOfMoiChangeValue Interface implentations Type1MoiChangeValue or Type2MoiChangeValue.
}
OneOfMoiChangeValue je Rozhraní, které má dva implementace Type1MoiChangeValue & Type2MoiChangeValue.
Teď, když jsem se projít RequestBody založené na "operaci" podal data mám na mapě "hodnotu" pole Žádosti Těla s některou z Rozhraní implementace Type1MoiChangeValue nebo Type2MoiChangeValue.
public interface OneOfMoiChangeValue {
}
Type1MoiChangeValue:
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2021-11-16T11:51:46.436+05:30[Asia/Calcutta]")
public class Type1MoiChangeValue extends ArrayList<Type2MoiChangeValue > implements OneOfMoiChangeValue {
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
return true;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode());
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class Type1MoiChangeValue {\n");
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(java.lang.Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}
Type2MoiChangeValue:
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2021-11-16T11:51:46.436+05:30[Asia/Calcutta]")
public class Type2MoiChangeValue extends HashMap<String, Object> implements OneOfMoiChangeValue {
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
return true;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode());
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class Type2MoiChangeValue {\n");
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(java.lang.Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}
Jsme pomocí jackson parser. Jak mohu dělat to. Prosím o radu!