Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring获取RESTful Web服务以理解JSON字符串_Java_Json_Spring_Rest - Fatal编程技术网

Java 使用Spring获取RESTful Web服务以理解JSON字符串

Java 使用Spring获取RESTful Web服务以理解JSON字符串,java,json,spring,rest,Java,Json,Spring,Rest,我对使用Spring和所有相关的东西都很陌生,但我正在努力克服这一点 我正在尝试使用SpringMVN和Gradle创建一个服务来理解JSON格式的字符串。都是用Java做的。 但我根本无法让它正常工作 这个 是控制器中的一个方法,但是,当我发送以下JSON格式的字符串时 {"IP":"192.168.1.9"} 我仍然得到了400码的回复 我尝试了不同的变体,其中一个示例使用@RequestBody代替,并为indata提供了自己的类。在另一个例子中,我接收一个HttpEntity,以观察字

我对使用Spring和所有相关的东西都很陌生,但我正在努力克服这一点

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

这个

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

{"IP":"192.168.1.9"}
我仍然得到了400码的回复

我尝试了不同的变体,其中一个示例使用@RequestBody代替,并为indata提供了自己的类。在另一个例子中,我接收一个HttpEntity,以观察字符串是否被正确接收。当字符串被正确接收时,我无法让我的代码“读取”它

我可以转到localhost:8080/toggle,通过HTTP设置变量,比如:

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

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


编辑: 哇!非常感谢您的快速回复,我本来希望一两天没有回复,但我在几分钟内得到了您的帮助。我知道这个网站很好,但是你很棒,谢谢

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

@RequestMapping(value = "/toggle")
public @ResponseBody String sendCommand(@RequestBody Ident ident) {
//body
}
但我仍然收到400个发送相同字符串的消息

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

我正在使用 @组件扫描 @启用自动配置
在主文件中,可能与设置错误有关吗?

您的方法应该是

 @RequestMapping(value = "/toggle/{IP}")
 public @ResponseBody String sendCommand(@PathVariable String IP){
   //body
 }
这里IP是一个占位符,可以容纳任何传递的IP

您的URL请求应该是


http://localhost:8080/toggle/192.168.1.9/[根据RESTful URL原则]

您正在混合使用不同的东西(请求参数和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

您肯定应该使用@RequestBody。该JSON对象是否表示您希望Jackson反序列化的Java对象,或者您计划手动解析它?您是否在服务器上获得堆栈跟踪?你检查过日志了吗?编辑:嗯,格式被破坏了,我把这个添加到原始问题中。这会起作用,但它假设他关心使他的服务RESTful。这是不正确的。在Spring MVC中,您需要将
@RequestParam
@PathParam
交换,这是
@PathVariable
,而不是
@PathParam
。另外需要注意的是,如果您的代码没有使用调试信息编译,则必须在注释中指定路径名:
@PathVariable(“IP”)
,使用类似Jackson的库是不正确的“需要”,虽然我同意它更干净。你绝对正确,它在技术上是不需要的,在这样一个简单的情况下,开发人员可以轻松地自己创建对象
@RequestMapping(value = "/toggle")
public @ResponseBody String sendCommand(@RequestBody String json){
   final YourObject yourObject = mapJsonToObject(json);
   final String ip = yourObject.getIp();
//body
}