マイクロ サービスに 2 つのコントローラーがあり、どちらも POST であり、要求本文を JSON として受け入れます。一方は正常に動作し、もう一方は別のチームからの JSON 入力であり、ルート クラス名を使用しているため、後でこのためのカスタム オブジェクト マッパーを作成する必要があります。コントローラー、助けてくれませんか?
以下のコードを見つけてください。
@RestController
@Slf4j
public class Controller2 {
@RequestMapping(value = "/some/update", method = RequestMethod.POST)
public String updateEmd(@RequestBody final UpdateEMDRequest updateEMDRequest) throws JsonProcessingException {
updateEMDRequest.getBookingReference()); // null now
return "success";
}
}
サンプルjsonは次のとおりです。
{
"UpdateEMDRequest":{
"TransactionStatus":"SUCCESS",
"UniqueTransactionReference":"046060420",
"PreAuthReference":"040520420",
"BookingReference":"8PJ",
"CarrierCode":"AS",
"TransactionMode":"Batch",
"CallBackUrl":"www.test.com/op/update",
"Offers":[
{
"Offer":{
"traveler":{
"firstName":"AHONY",
"surname":"DNEN",
"EMD":[
"081820470"
]
}
}
}
]
}
}
UpdateEMDRequest、java
@JsonInclude(Include.NON_NULL)
public class UpdateEMDRequest {
@JsonProperty("UniqueTransactionReference")
private String uniqueTransactionReference;
@JsonProperty("TransactionStatus")
private String transactionStatus;
@JsonProperty("PreAuthReference")
private String preAuthReference;
@JsonProperty("BookingReference")
private String bookingReference;
@JsonProperty("CarrierCode")
private String carrierCode;
@JsonProperty("TransactionMode")
private String transactionMode;
@JsonProperty("CallBackUrl")
private String callBackUrl;
@JsonProperty("Offers")
private List<Offers> offers;
}
そのため、この json は適切に解析されず、updateEMDRequest のプロパティは常に null です。