如何以 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.
我有一个 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.