Spring RESTtemplate POST [英] Spring RESTtemplate POST

查看:57
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆