RestTemplate POST请求RequestParams和RequestBody

时间:2012-01-26 01:54:21

标签: java spring resttemplate

我有一台服务器和一台客户端。我使用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,所以任何帮助都会非常感激。

1 个答案:

答案 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)。我建议看看它。