![](/img/trans.png)
[英]Spring framework HttpMessageNotReadableException: Required request body is missing
[英]Spring: Required request body is missing. Can't Pass JSON to RestController
我在將JSON傳遞到RestController時遇到問題。 它似乎沒有消耗它。
控制器:
@PostMapping(path = "Users/{UserId}/Transactions",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public CompletableFuture<ResponseEntity<?>> startGameRound(@RequestBody TransactionRequest request,
@RequestParam("PartnerUserSessionKey") String sessionId,
@PathVariable("UserId") String playerUUID) throws ExecutionException, InterruptedException { // Logic }
TransactionRequest
對象模型:
public class TransactionRequest {
@JsonProperty("TransactionType")
private TransactionType transactionType;
@JsonProperty("TransactionId")
private String transactionId;
@JsonProperty("TransactionCreationDate")
private LocalDateTime transactionCreationDate;
@JsonProperty("Amount")
private Long amount;
@JsonProperty("Rake")
private BigDecimal rake;
@JsonProperty("CurrencyCode")
private String currencyCode;
@JsonProperty("EntityReferences")
private List<EntityReference> entityReferences;
@JsonProperty("Game")
private Game game;
public TransactionRequest() {
}
//getters & setters & hashEquals & toString
}
這是嘗試發布到控制器的測試方法 :
def createTransactionRequest(Integer roundNum, String transType, BigDecimal transactionAmount) {
def transactionRequest = builder{
'TransactionType' transType
'TransactionId' "${new Random().nextInt(50)}"
'TransactionCreationDate' LocalDateTime.now().toString()
'Amount' transactionAmount.longValue()
'Rake' 0.0
'CurrencyCode' userCurrencyCode
'EntityReferences' builder.call([
{ 'EntityType' "CasinoRound"; 'EntityId' roundNum },
{ 'EntityType' "CasinoSession"; 'EntityId' gameSessionId }
])
'Game' (GameId: "111", GameName: "Some Game")
}
String currentDate = ZonedDateTime.now(ZoneId.of("UTC")).format(DATE_FORMATTER)
def authorizationHeader = buildAuthHeader("POST",
"Users/${player.uuid}/Transactions?PartnerUserSessionKey=$gameSessionId",
JsonOutput.toJson(transactionRequest), currentDate)
return client.post(path: "Users/${player.uuid}/Transactions", query: ["PartnerUserSessionKey": gameSessionId],
headers: ['Authorization' : authorizationHeader, DateUtc : currentDate]) {
type "application/json"
json transactionRequest
}
}
測試方法是用Groovy編寫的。 以及groovy.json.JsonBuilder
Builder。 (忽略authorizationHeader
方法,該方法僅用於生成用於授權的簽名,它可以工作。)我嘗試僅發送幾個參數,但是每次都會給我同樣的錯誤。 這是錯誤:
2017-09-05 12:38:26,005 WARN c.n.c.e.CommonExceptionHandler - Required request body is missing: public java.util.concurrent.CompletableFuture<org.springframework.http.ResponseEntity<?>> com.project.TransactionEndpoint.startGameRound(com.project.api.TransactionRequest,java.lang.String,java.lang.String) throws java.util.concurrent.ExecutionException,java.lang.InterruptedException
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.util.concurrent.CompletableFuture<org.springframework.http.ResponseEntity<?>> com.project.endpoint.TransactionEndpoint.startGameRound(com.project.api.TransactionRequest,java.lang.String,java.lang.String) throws java.util.concurrent.ExecutionException,java.lang.InterruptedException
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:153)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:127)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
我相信它與對象模型有關,但不確定。 我嘗試通過不同的組合,但沒有運氣。 這只會給我Required request body is missing
。
這是生成的JSON:
{"TransactionType":"CasinoRound_Stake","TransactionId":"31","TransactionCreationDate":"2017-09-05T15:38:08.610","Amount":400,"Rake":0.0,"CurrencyCode":"EUR","EntityReferences":[{"EntityType":"CasinoRound","EntityId":1},{"EntityType":"CasinoSession","EntityId":"9f31d8b9-28f7-4931-bb9d-73f90c2b2de7"}],"Game":{"GameId":"111","GameName":"Some Game"}}
您可能有一個已經閱讀過正文的過濾器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.