如何以 JSON 格式发送 Integer 值并在 REST Controller 中接收?
Posted
技术标签:
【中文标题】如何以 JSON 格式发送 Integer 值并在 REST Controller 中接收?【英文标题】:How to send Integer value in the form of JSON format and recieve in REST Controller? 【发布时间】:2019-04-24 00:05:02 【问题描述】:我有一个 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
。如何达到我的要求?
注意:我不想创建任何额外的 POJO 类,甚至不想使用查询/路径参数发送数据。
【问题讨论】:
我会说:而不是 "mobile" : 123456
只需发送 123456
作为 HTTP 正文。或者,使用 Integer
字段创建一个类 Mobile
,并将其用作方法的参数。
【参考方案1】:
只需以 JSON 格式发送号码。 12345 使用 @RequestBody 接收 int 号。 它会起作用的。 我使用邮递员以 RAW JSON 格式发送。
顺便说一句,我是学习 Spring Boot 的初学者。
【讨论】:
【参考方案2】: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(但不推荐)
【讨论】:
考虑到这个问题不是很合理,这是一个合理的答案。【参考方案3】:如果你有 org.json.JSONObject
@PostMapping(value = "/otp")
public void otp(@RequestBody String mobile)
JSONObject obj = new JSONObejct(mobile);
System.out.print(obj.getInt("mobile"));
【讨论】:
【参考方案4】:如果你想像这样发送你的身体:
"mobile":123456
您将创建另一个对象来接收该值。
但如果你只想接受整数值而不接受任何其他对象,你不会将json对象放入请求正文中,而只会放入整数本身。
Body:
12345
【讨论】:
【参考方案5】:像下面这样创建一个 pojo 类。
public class Mobile
private Integer mobile;
//getter and setter
然后
public void otp(@RequestBody Mobile mobile)
打印值使用
mobile.getMobile();
【讨论】:
我不想发送查询参数中的数据。我只想通过 JSON 正文发送。 虽然这样的类是一种方法,但 OP 想要一个 integer,而不是 string! 感谢指正。在问题的一个地方他也提到了字符串。 我不想为一个属性/值创建一个额外的 POJO 类。如果我们有 100 个类的需求,那么我们不需要创建 100 个 POJO 类。甚至我也不想将数据作为查询或路径参数发送。除了这些,如果有任何解决方案,请告诉我。【参考方案6】:您可以使用类作为请求正文:
class Request
public Integer mobile;
并像这样指定参数:
public void otp(@RequestBody Request mobile)
...
【讨论】:
我不想为一个属性/值创建一个额外的类。如果我们有 100 个类的需求,那么我们不需要创建 100 个 POJO 类。 @Altaf 在现实世界的情况下,一个字段有 100 个 POJO 类有点不寻常。请参阅 AokoQin 的回答,该回答建议有一个共同的课程,或者更清楚地解释您的情况。以上是关于如何以 JSON 格式发送 Integer 值并在 REST Controller 中接收?的主要内容,如果未能解决你的问题,请参考以下文章
PHP 如何从 AJAX 调用中发布多个数组/json 值并在同一个 SQL 查询中运行它们?
如何从 javascript 变量发送表单值并在 php 中作为整数接收? [复制]