gpt4 book ai didi

java - POST 请求不会在 RestTemplate 中添加请求的 header

转载 作者:行者123 更新时间:2023-11-30 08:56:45 24 4
gpt4 key购买 nike

我必须通过发送 POST 请求来获取 User:

POST http://myurl.com/rest/user/getbyusername/{user} HTTP/1.0
代币:uonIQz8WNE7UB5iR2V0ZYQ==
用户代理:Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0;)
Pragma:无缓存
内容长度:0
主机: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);
}

Controller :

@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)) {...}
}

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

最佳答案

您不能像现在这样设置 header ,您需要将请求包装在 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 header 附加到每个请求。然后,您将在 RestTemplate 上设置它:

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

这将使您不必记住为每个请求发送 header 。

关于java - POST 请求不会在 RestTemplate 中添加请求的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28475707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com