簡體   English   中英

Java Spring 接收長打印列表 MismatchedInputException

[英]Java Spring receiving list of longs prints MismatchedInputException

我使用以下 PostMapping 來接收 3 個參數:

@PostMapping(value = "/createJobs",
         consumes="application/json",
         produces="application/json")
public @ResponseBody ResponseEntity<HttpStatus> createJobs(
        @RequestBody ArrayList<Long> sizes,
        @RequestBody Long accounts,
        @RequestBody Long productId
) {
    
    System.out.println(sizes + " " + accounts + " " + productId);
    try {
        jobService.createJobs(productId, sizes, accounts);
        return ResponseEntity.status(HttpStatus.OK).build();
    }
    catch (final Exception e) {
        LOGGER.error(e.getMessage());
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }
}

我使用 Angular 來發送 post 請求。 我發送的數據如下所示:

{
   "productId":715,
   "sizes":[3,5],
   "accounts":3
}

但發送后請求后,我收到以下錯誤:

.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `java.util.ArrayList<java.lang.Long>` out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList<java.lang.Long>` out of START_OBJECT token
 at [Source: (PushbackInputStream); line: 1, column: 1]]

雖然使用@RequestBody將每個請求密鑰放在方法 arguments 上很方便,但建議為每個請求 Model 制作一個通用的 class。

例如我的 Controller:

ResponseEntity<TransactionLog> checkDiscount(HttpServletRequest request, 
                                             @RequestBody RequestCheckDiscount requestBody) {
    // Your code here
}

我的請求 Model:

public class RequestCheckDiscount {
    private String username;
    private int amount;
    private long time;

    // Standard getters and setters.
}

POST 請求正文中的鍵應該是productId而不是product

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM