由于请求参数列表超出限制,我尝试使用请求正文(JSON)进行get调用。我能够通过邮递员/失眠症发送请求,并且请求到达控制器为止,而没有任何错误。但是“ requstBody”在控制器上为空。我在这里想念什么?
@GET
@Path("\path")
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
public Response getResponse(String requestBody) throws IOException { }
当我用@POST替换@GET时,requestBody具有价值。对于GET通话,我们还需要添加其他内容吗?
答案 0 :(得分:3)
由于请求参数列表超出限制,我尝试使用请求正文(JSON)进行get调用。我能够通过邮递员/失眠症发送请求,并且请求到达控制器为止,而没有任何错误。但是“ requstBody”在控制器上为空。我在这里想念什么?
您缺少的一件事是,使用GET的请求正文的语义没有很好地定义。
GET请求消息中的有效负载没有定义的语义;在GET请求上发送有效内容正文可能会导致某些现有实现拒绝该请求。
答案 1 :(得分:2)
将@RequestBody
放入String requestBody
参数
答案 2 :(得分:2)
@RequestMapping("/path/{requestBody}")
public Response getResponse(@PathVariable String requestBody) throws IOException { }
答案 3 :(得分:2)
在Http Get
方法中有两种发送参数的方法。 PathVariable
和RequestParam
。这样,发送的参数在请求URL中可见。例如:
www.sampleAddress.com/countries/{parameter1}/get-time?city=someValues
在上述请求中,parameter1
是路径变量,parameter2
是请求参数。因此,有效URL的示例为:
www.sampleAddress.com/countries/Germany/get-time?city=berlin
要在Java控制器中访问这些参数,您需要为参数定义一个特定的名称。例如,以下控制器将接收此类请求:
@GetMapping(value = "/countries/{parameter1}/get-time", produces = "application/json; charset=utf-8")
public String getTimeOfCities(
@PathVariable(value = "parameter1") String country,
@RequestParam(value = "city") String city
){
return "the method is not implemented yet";
}
您可以通过RequestBody
请求发送Get
,但根据this链接不建议这样做。
是的,您可以使用GET发送正文,否,它永远不会有用 为此。
在elasticsearch website中的详细说明也很好:
某些语言(特别是JavaScript)的HTTP库不允许GET请求具有请求正文。实际上,有些用户很惊讶GET请求曾经被允许具有正文。
事实是,RFC 7231是处理HTTP语义和 内容-没有定义带有GET请求的GET请求应该如何处理 身体!结果,一些HTTP服务器允许它,而某些-特别是 缓存代理-不。
如果您想使用Post
方法,也可以拥有RequestBody
。如果您想通过发布请求发送数据,则合适的控制器应如下所示:
@PostMapping(value = "/countries/{parameter1}/get-time", produces = "application/json; charset=utf-8")
public String getTimeOfCitiesByPost(
@PathVariable(value = "parameter1") String country,
@RequestParam(value = "city") String city,
@RequestBody Object myCustomObject
){
return "the method is not implemented yet";
}
myCustomObject
可以具有您在代码中定义的任何类型的数据。请注意,通过这种方式,您应该以{{1}}字符串的形式发送请求正文。