【问题标题】:POST request doesn't add requested headers in RestTemplatePOST 请求不会在 RestTemplate 中添加请求的标头
【发布时间】:2015-02-12 10:59:30
【问题描述】:

我必须通过发送 POST 请求获得User

POST http://myurl.com/rest/user/getbyusername/{user} HTTP/1.0 token: uonIQz8WNE7UB5iR2V0ZYQ== User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0;) Pragma: no-cache Content-Length: 0 Host: myurl.com

我正在尝试使用这段代码:

private User getByUsername(String username) {
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    List<String> list = new ArrayList<>();
    list.add(Params.token);
    headers.put("token", list);
    return restTemplate.postForObject("http://myurl.com/rest/user/getbyusername/{username}", headers, User.class,
            username);
}

控制器:

@ResponseBody
@RequestMapping(value = "getbyusername/{username}", 
                produces = "application/json", 
                method=RequestMethod.POST)
public String getByUsername(@PathVariable("username") 
                String username, HttpServletRequest request)
        throws IOException {
    if (!request.getHeader(headerName).isEmpty() && StringUtils.isNotBlank(token)
            && request.getHeader(headerName).equals(token)) {...}
}

遗憾的是结果是Error 404。我的代码是缺少什么还是我做错了?提前致谢

【问题讨论】:

    标签: java rest post resttemplate


    【解决方案1】:

    您不能像当前那样设置标头,您需要将您的请求包装在 HttpEntity 中,例如:

    RestTemplate restTemplate = new RestTemplate();
    
    HttpHeaders headers = new HttpHeaders();
    headers.set("token", Params.token);
    
    HttpEntity<String> entity = new HttpEntity<>(username, headers);
    
    restTemplate.postForObject("http://myurl.com/rest/user/getbyusername/{username}",
            entity,
            User.class);
    

    postForObject Javadocs 建议使用此方法。

    或者,您可以实现一个ClientHttpRequestInterceptor,它将token 标头附加到每个请求。然后你可以在RestTemplate:

    restTemplate.setInterceptors(new LinkedList<>(new MyTokenHeaderAddingInterceptor()));
    

    这样您就不必记住为每个请求发送标头。

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 2017-06-22
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2016-12-22
      相关资源
      最近更新 更多