我有一个休息端点,它使用RequestParam和RequestBody作为参数。在客户端,我正在使用javax客户端来调用此其余端点,但是由于响应代码405来自服务器,因此出现了问题。
这是springBoot rest端点代码:
@RequestMapping(value = "/run", method = RequestMethod.POST, consumes = "application/json")
public ReportRunResult runBackendCall(@RequestParam(name = "clientName", required = true) String reportName,
@RequestBody Map<String, ReportParameter> formParams) {
return service.runReport(reportName, formParams);
}
这是我从客户端调用此终结点的方式:
public ReportRunResult runBackendCall(String name, Map<String, ReportParameter> parameters) {
ReportRunResult reportResponse = null;
WebTarget target = RestClientBuilder.clientBuilder(RestClientBuilder.buildSSLContext(), 3000, 10000).build()
.target(serverURL.get() + "/run?reportName=" + name);
Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON_TYPE);
Response response = target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(parameters));
reportResponse = response.readEntity(ReportRunResult.class);
log.info("response. " + response.getStatus() + " ");
}
我不明白为什么服务器发送响应405是否需要在Entity.json(parameters))中将Map(parameters)转换为json字符串? ?
答案 0 :(得分:1)
状态代码withRouter(Invoice)
告诉您405
,因此您的HTTP-Method可能有问题。
您将Method Not Allowed
用作WebTarget
的{{1}}中的代码也存在故障,但是REST服务希望将reportName
用作{{1 }}。
所以改变
RequestParam
到
clientName
答案 1 :(得分:0)
您可以像这样使用JSONObject:
new JSONObject(map)
PS:地图应为Map<String,String>