【问题标题】:Spring RESTtemplate POSTSpring REST 模板 POST
【发布时间】:2013-12-13 01:03:18
【问题描述】:

我正在使用 Spring 框架并尝试执行发布请求。我的 post 方法采用 url、HttpMethod 和进入请求正文的参数。

注意:在 network.POSTRequest( URL, ..,...) 中传递的 var URL 对于每个调用都是不同的。

现在,如果我用这样的一个参数调用这个方法......(它工作得很好!)

//with one parameter
MultiValueMap<String, String> postParams = new LinkedMultiValueMap<String, String>();
postParams.add("id", "524cd432539ed");
network.POSTRequest( URL, HttpMethod.POST, postParams );

,但是如果有两个这样的参数......(它会抛出这个错误)

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 方法

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();
    }

【问题讨论】:

  • 让我们看看你的控制器
  • 您是否使用浏览器 POST 插件或 wgetcurl 使用单个或多个参数手动测试了 POST 端点?可能是端点在 2 个参数上呕吐。
  • 是的,我已经使用邮递员(chrome 扩展)完成了一个请求,它成功了。

标签: java spring rest spring-mvc


【解决方案1】:

这不是设置消息转换器的好方法:

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

您应该对此使用一致的方法:

List< HttpMessageConverter<?> > messageConverters = new ArrayList< HttpMessageConverter<?> >();   
// empty list created

messageConverters.add( new MappingJacksonHttpMessageConverter() );      
messageConverters.add( new StringHttpMessageConverter() );  

restTemplate.setMessageConverters( messageConverters );

【讨论】:

  • 这不是解决方案,但绝对有用的建议。
  • 我发现了问题。这与请求是否具有一个或两个参数无关。事实是 api 调用是不同的。一个 api 调用接受数组,另一个不接受。这是主要问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 2020-06-23
相关资源
最近更新 更多