我有一台服务器和一台客户端。我使用Spring在服务器和RestTemplate上映射http请求以向服务器发出请求。
服务器代码如下所示:
@RequestMapping (value="/someEndPoint", method = RequestMethod.POST)
@ResponseBody
public String configureSettings(
@RequestParam(required=false) Integer param1,
@RequestParam(required=false) Long param2,
@RequestBody String body)
{
if(param1 != null)
// do something
if(body not empty or null)
//do something
}
客户方:
String postUrl = "http://myhost:8080/someEndPoint?param1=val1"
restTemplate.postForLocation(postUrl, null);
这样可以在服务器端从param1触发正确的操作
但是,请求的正文还包含:
参数1 = VAL1
设置它时的请求体将是json所以我想要的是能够在不设置主体的情况下设置其他参数。
我知道我正在使用restTemplate,所以任何帮助都会非常感激。
答案 0 :(得分:1)
您正在执行HTTP POST
,但您没有提供放置POST
ed的对象。 Spring的RestTemplate
试图找出你想要的POST
,所以看起来并且看到url的查询字符串有东西,所以它试图使用它。
不要将查询字符串添加到POST
,只需提供您想要的对象POST
。
String postUrl = "http://myhost:8080/someEndPoint"
restTemplate.postForLocation(postUrl, new ParamModel("val1"));
本书Spring in Action (3rd edition)
涵盖RestTemplate
(以及一般的REST)。我建议看看它。