簡體   English   中英

如何以 JSON 格式發送整數值並在 REST Controller 中接收?

[英]How to send Integer value in the form of JSON format and recieve in REST Controller?

我有一個 REST 控制器,我在其中編寫了此代碼

@PostMapping(value = "/otp")
public void otp(@RequestBody Integer mobile) {

    System.out.println(" Mobile = "+mobile);
}

我使用以下輸入從 Postman 調用此方法

URL : localhost:8080/otp

Body

{
    "mobile":123456
}

但我收到以下異常

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not deserialize instance of java.lang.Integer out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.Integer out of START_OBJECT token

如果我將 String 作為這樣的參數

@PostMapping(value = "/otp")
public void otp(@RequestBody String mobile) {

    System.out.println(" Mobile = "+mobile);
}

並將輸入作為

{
    "mobile":123456
}

現在它在控制台中打印如下

 Mobile = {
    "mobile":"123456"
}

但我只想要這個值123456 如何達到我的要求?

注意:我不想創建任何額外的 POJO 類,甚至我不想使用查詢/路徑參數發送數據。

如果您想發送您的身體,例如:

{
    "mobile":123456
}

您將創建另一個對象來接收該值。

但是如果您只想接受整數值而不接受任何其他對象,則不會將 json 對象放入請求正文中,而只會放入整數本身。

Body:

12345

創建一個如下所示的 pojo 類。

public class Mobile{
   private Integer mobile;
  //getter and setter
}

進而

public void otp(@RequestBody Mobile mobile)

打印值使用

mobile.getMobile();

您可以使用類作為請求正文:

class Request {
    public Integer mobile;
}

並指定這樣的參數:

public void otp(@RequestBody Request mobile) {
...

json和@RequestBody的轉換過程是自動的,需要你提供一個包含適當字段的類。如果你堅持通過請求體發送數據,你可以使用String來接收json數據作為String。例如:

public void test(@RequestBody String request){
        log.info(request);
    }

通過這種方式,您收到的請求正文是一個字符串。您需要一些其他工具來幫助您轉換它。像 org.json 一樣,您可以從這里獲得更多信息HttpServletRequest get JSON POST data

但最簡單的方法是創建一個新類來接收數據或將@RequestBody 更改為@RequestParam 或@Pathvariable。

如果您仍然想使用 json 作為請求正文,也許您可​​以創建一個通用類 A,其中包含許多字段,例如姓名、電話號碼、電子郵件……然后在您發送僅包含手機的請求后,您只需要A.getMobile().這樣,即使你得到100個請求,你仍然需要一個POJO(但不推薦)

只需發送 JSON 中的數字即可。 12345 使用@RequestBody 來接收整數編號。 它會起作用。 我使用郵遞員以 RAW JSON 格式發送它。

順便說一句,我是初學者學習 Spring Boot。

如果你有 org.json.JSONObject

 @PostMapping(value = "/otp")
 public void otp(@RequestBody String mobile) {
   JSONObject obj = new JSONObejct(mobile);
   System.out.print(obj.getInt("mobile"));
}

暫無
暫無

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

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