在Java中,尤其是Spring Boot中,如何通过使用RestTemplate调用Api从域B获取或设置域A的会话值?
域B中的示例,我使用RestTemplate postForObject
从域demo2.com调用Api:
public ResponseEntity<String> doLogout(@RequestBody String userId){
System.out.println("123" + userId);
RestTemplate rest = new RestTemplate();
for(String s : listUrl) {
System.out.println("url: " + s);
rest.postForObject("http://demo2.com"+"/doLogout", userId, String.class);
}
return new ResponseEntity<String>(HttpStatus.OK);
}
在demo2.com中,这是我的Api。但是,当我打印demo2.com的会话属性userId
和access-token
的值时,它始终显示为null。
@RequestMapping(value = "/doLogout", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> doLogout(HttpServletRequest request, @RequestBody String userId){
System.out.println("abc" + SessionUtil.getAttribute(request, "access-token") + SessionUtil.getAttribute(request, "userId"));
if(userId.equals(SessionUtil.getAttribute(request, "userId"))) {
System.out.println("vao day");
SessionUtil.setAtribute(request, "access-token", null);
}
return new ResponseEntity<String>(HttpStatus.OK);
}
答案 0 :(得分:0)
尽管我从未在RestTemplate中使用postForObject方法,但我可以在他们的文档(https://www.baeldung.com/rest-template)中看到,您必须将Post参数包装在HttpEntity对象中。
因此,在您的位置,我会按照他们的建议尝试,
ClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(requestFactory);
HttpEntity<String> request = new HttpEntity<>(new String("<user_id_value>"));
String userId = restTemplate.postForObject("http://demo2.com"+"/doLogout", request, String.class);
System.out.println("User ID : " + userId);
但是,postForObject用于创建资源,然后将其返回。如果要提交带有将要指定的名称和名称的Post Parameters表单,则必须遵循我上面粘贴的链接中的4.4,
https://www.baeldung.com/rest-template
通过这种方式,如果您为userId包含键值对,则可以在demo2.com中获取它