如何以 JSON 格式发送整数值并在 REST 控制器中接收?

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

如果我像这样将字符串作为参数

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

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

并将输入传递为

{
    "mobile":123456
}

现在控制台打印如下

 Mobile = {
    "mobile":"123456"
}

但我只想要这个值 123456。如何达到我的要求?

NOTE: I don't want to create any additional POJO class or even I don't want to send the data using query/path parameter.

像下面这样创建一个 pojo class。

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

然后

public void otp(@RequestBody Mobile mobile)

打印值使用

mobile.getMobile();

您可以使用 class 作为请求正文:

class Request {
    public Integer mobile;
}

并像这样指定参数:

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

如果你有org.json.JSONObject

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

如果你想发送你的body喜欢:

{
    "mobile":123456
}

您将创建另一个 object 来接收该值。

但是如果你只想接受整数值而不接受任何其他 object,你不会在请求 body 中放入 json object,而只接受整数本身。

Body:

12345

使用json和@RequestBody的转换过程是自动的,需要你提供一个class,其中包含适当的field.If你坚持通过请求主体发送数据,你可以使用String来接收 json 数据作为 String.For 示例:

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

通过这种方式,您收到的请求正文是 String.You 需要一些其他工具来帮助您转换 it.Like org.json,您可以从这里获得更多信息

但最简单的方法是创建一个新的 class 来接收数据或将 @RequestBody 更改为 @RequestParam 或 @Pathvariable。

如果您仍想使用 json 作为请求正文,也许您可​​以创建一个通用的 class A,其中包含许多字段,例如姓名、phone 号码、电子邮件。 ..然后你发送一个只包含mobile的请求后,你只需要A.getMobile()。这样,即使你有100个请求,你仍然需要一个POJO(但不推荐)

发送JSON中的号码即可。 12345 使用@RequestBody 接收整数。 它会起作用。 我使用邮递员以 RAW JSON.

格式发送

BTW,我是初学者学习Springboot.