Spring RESTtemplate POST [英] Spring RESTtemplate POST
问题描述
我正在使用 Spring 框架并尝试执行发布请求.我的 post 方法采用 url、HttpMethod 和进入请求正文的参数.
I am using the Spring Framework and trying to do a post request. My post method takes the url, the HttpMethod, and the parameters that go into the body of the request.
注意:在 network.POSTRequest( URL, ..,...) 中传递的 var URL 对于每次调用都是不同的.
NOTE: The var URL passed in network.POSTRequest( URL, ..,...) is different for each call.
现在,如果我像这样用一个参数调用这个方法......(它工作得很好!)
Now, if I call this method with one parameter like so...(it works beautifully!)
//with one parameter
MultiValueMap<String, String> postParams = new LinkedMultiValueMap<String, String>();
postParams.add("id", "524cd432539ed");
network.POSTRequest( URL, HttpMethod.POST, postParams );
,但是如果有两个这样的参数......(它会抛出这个错误)
,but if there are two parameters like so....(it throws this error)
org.springframework.web.client.HttpServerErrorException:500 内部服务器错误
//with two parameters
MultiValueMap<String, String> postParams = new LinkedMultiValueMap<String, String>();
postParams.add("id", "crisp");
postParams.add("name", "honey");
network.POSTRequest( URL, HttpMethod.POST, postParams );
这是POSTRequest方法
This is the POSTRequest method
public Object POSTRequest( String URL, HttpMethod method, MultiValueMap<String, String> postParams ){
HttpEntity<?> requestEntity =
new HttpEntity< MultiValueMap<String, String> >(postParams, getHeaders());
RestTemplate restTemplate = new RestTemplate();
List< HttpMessageConverter<?> > messageConverters = new ArrayList< HttpMessageConverter<?> >();
messageConverters.add( new MappingJacksonHttpMessageConverter() );
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
restTemplate.setMessageConverters( messageConverters );
System.out.println( requestEntity.toString() );
ResponseEntity result =
restTemplate.exchange( URL, method, requestEntity, APIResponse.class ) ;
return result.getBody();
}
推荐答案
这不是设置消息转换器的好方法:
This is not a good way of setting message converters:
List< HttpMessageConverter<?> > messageConverters = new ArrayList< HttpMessageConverter<?> >();
// empty list created
messageConverters.add( new MappingJacksonHttpMessageConverter() );
// list has 1 elem now
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
// adds StringHttpMessageConverter to restTemplate converter list
restTemplate.setMessageConverters( messageConverters );
// replaces restTemplate converter list with your custom list containing MappingJacksonHttpMessageConverter only
// original list containing StringHttpMessageConverter is LOST
您应该对此使用一致的方法:
You should rather use consistent approach to this:
List< HttpMessageConverter<?> > messageConverters = new ArrayList< HttpMessageConverter<?> >();
// empty list created
messageConverters.add( new MappingJacksonHttpMessageConverter() );
messageConverters.add( new StringHttpMessageConverter() );
restTemplate.setMessageConverters( messageConverters );
这篇关于Spring RESTtemplate POST的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!