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

Java 如何以JSON格式发送整数值并在REST控制器中接收?,java,json,spring,spring-boot,spring-restcontroller,Java,Json,Spring,Spring Boot,Spring Restcontroller,我有一个REST控制器,我在其中编写了这段代码 @PostMapping(value = "/otp") public void otp(@RequestBody Integer mobile) { System.out.println(" Mobile = "+mobile); } 我通过以下输入从Postman调用这个方法 URL:localhost:8080/otp 正文: { "mobile":123456 } 但我得到了以下例外 org.springframewo

我有一个REST控制器,我在其中编写了这段代码

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

    System.out.println(" Mobile = "+mobile);
}
我通过以下输入从Postman调用这个方法

URL:localhost:8080/otp

正文

{
    "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
。如何达到我的要求


注意:我不想创建任何额外的POJO类,甚至不想使用query/path参数发送数据


创建如下所示的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) {
...

如果您有org.json.JSONObject

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

如果您想发送您的身体,如:

{
    "mobile":123456
}
您将创建另一个对象以接收该值

但是,如果您只想接受整数值而不接受任何其他对象,则不会将json对象放在请求体中,而只将整数本身放在请求体中

正文:


12345

使用json和@RequestBody的转换过程是自动进行的,需要您提供一个包含正确字段的类。如果您坚持按请求正文发送数据,您可以使用字符串作为字符串接收json数据。例如:

public void test(@RequestBody String request){
        log.info(request);
    }
通过这种方式,您收到的请求正文是一个字符串。您需要一些其他工具来帮助您转换它。例如org.json,您可以从这里获得更多信息

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


如果您仍然想使用json作为请求主体,也许您可以创建一个公共类a,其中包含许多字段,如姓名、电话号码、电子邮件……然后在您发送一个只包含mobile的请求后,您只需要a.getMobile()。这样,即使您收到100个请求,您仍然需要一个POJO(但不推荐)

只需发送JSON格式的数字即可。 12345 使用@RequestBody接收整数。 它会起作用的。 我使用postman以原始JSON发送它


顺便说一句,我是学习Spring Boot的初学者。

我不想发送查询参数中的数据。我只想通过JSON正文发送。虽然这样的类是一种方法,但OP希望有一个整数,而不是字符串!谢谢你的更正。在问题中,有一个地方他也提到了字符串。我不想为一个属性/值创建额外的POJO类。如果我们需要100个类,那么我们需要创建100个POJO类。甚至我也不想将数据作为查询或路径参数发送。除此之外,如果有任何解决方案,请告诉我。我会说:与其将
{“mobile”:123456}
作为HTTP主体发送
123456
。或者创建一个带有
Integer
字段的类
Mobile
,并将其用作方法的参数。我不想为一个属性/值创建额外的类。如果我们需要100个类,那么我们就不需要创建100个POJO类。@Altaf在现实世界中,一个字段有100个POJO类有些不寻常。请看奥科钦的答案,其中建议开设一门普通课程,或者更清楚地解释你的情况。考虑到这个问题并不十分合理,这是一个合理的答案。