我对使用 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/