java - 使用 Spring 获取 RESTful Web 服务来理解 JSON 字符串

标签 java json spring rest

我对使用 Spring 以及涉及的所有事情都很陌生,但我正在努力解决这个问题。

我正在尝试使用 Spring MVN 和 Gradle 来创建一个服务来理解 JSON 格式的字符串。这一切都是用 Java 制作的。 但我根本无法让它正常工作。

这个

@RequestMapping(value = "/toggle")
public @ResponseBody String sendCommand(@RequestParam(value="IP") String IP){
//body
}

是我的 Controller 中的一个方法,但是,当我发送以下 JSON 格式的字符串时

{"IP":"192.168.1.9"}

我仍然收到响应代码 400。

我尝试了不同的变体,其中一个示例使用 @RequestBody,并使用自己的 indata 类。另一个地方是我接收 HttpEntity,以观察字符串是否被正确接收。虽然正确接收了字符串,但我无法让我的代码“读取”它。

我可以访问 localhost:8080/toggle,并通过 HTTP 设置变量,例如:

http://localhost:8080/toggle?IP=192.168.1.9

有效。

您建议在哪里继续进行故障排除? 提前致谢!

<小时/>

编辑: 哇。非常感谢您的快速回复,我原以为一两天没有回复,结果在几分钟内就得到了您的帮助。我知道这个网站很好,但你也很棒,谢谢!

也就是说,我创建了一个名为 Ident 的新类,它只有一个私有(private) String 变量,带有构造函数、setter 和 getter。 现在我有了

@RequestMapping(value = "/toggle")
public @ResponseBody String sendCommand(@RequestBody Ident ident) {
//body
}

尽管如此,我仍然收到 400 发送相同字符串的消息。

虽然它可以使用 @PathVariable 工作,但我想让它工作,因为现在我只是在尝试它。稍后它将用于发送不仅仅是 IP 的内容。

我正在使用 @ComponentScan @EnableAutoConfiguration 在主文件中,这可能与设置错误有关吗?

最佳答案

您正在混合不同的东西(请求参数和 json 对象)。

为了捕获已发布的{"IP":"192.168.1.9"},您需要执行以下操作:

@RequestMapping(value = "/toggle")
public @ResponseBody String sendCommand(@RequestBody String json){
   final YourObject yourObject = mapJsonToObject(json);
   final String ip = yourObject.getIp();
//body
}

您还需要创建一个与 json 相对应的类,并将该 json 映射到该类(使用 jackson 等库)。

如果您想放弃创建中间对象(我不建议您这样做,因为它会使代码更清晰),您可以使用标准 JDK 方法从 json 字符串中提取 IP

关于java - 使用 Spring 获取 RESTful Web 服务来理解 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23219344/

相关文章:

java - 创建 servlet 上下文资源 [WEB-INF/applicationContext.xml] 中定义的名称为 "datasource"的 bean 时出错

python - 为什么 Python 默认不符合 JSON 标准 (rfc7159)?

php - JSON 到 MYSQL - JSON 响应格式是否正确 - 循环正确吗?

java - 如何使用 Spring Boot 和嵌入式 Tomcat 配置此属性?

java - NoClassDefFoundError : org/apache/commons/lang/StringUtils

Java Maven 库项目模板

javascript - 将 json 发送到网格

java - 在方法中获取 SharedPreferences 的上下文

python - 从 JSON 列中提取值非常慢

java - 信息 : No Spring WebApplicationInitializer types detected on classpath