【发布时间】:2017-09-12 00:12:20
【问题描述】:
我尝试使用 RestTemplate 调用控制器中的地址,结果我想获得 OK 或 NOT FOUND 状态 我在这个控制器中这样做
@GetMapping(value = "/thanks")
public ModelAndView confirmAccount(
@RequestParam String token,
UriComponentsBuilder uriComponentsBuilder
) {
RestTemplate restTemplate = new RestTemplate();
HttpEntity<Object> entity = new HttpEntity<>(new HttpHeaders());
UriComponents uriComponents
= uriComponentsBuilder.path("/register/token/{token}").buildAndExpand(token);
ResponseEntity<Boolean> response = restTemplate
.exchange(uriComponents.toUri(),
HttpMethod.PUT,
entity,
Boolean.class);
return response.getStatusCode().toString().equals("200")
? new ModelAndView("redirect:/signIn") : new ModelAndView("tokenNotFound");
}
我称之为控制器的这个地址。
@RequestMapping(value = "/register/token/{token}", method = RequestMethod.PUT)
public
HttpEntity<Boolean> confirmAccount(
@PathVariable String token
) {
Optional<User> userOptional = userService.findByActivationToken(token);
if(userOptional.isPresent()) {
User user = userOptional.get();
user.setActivationToken(null);
user.setEnabled(true);
userService.saveUser(user);
} else {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(true);
}
结果她把我扔到了控制台
org.springframework.web.client.HttpClientErrorException: 404 null
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:63) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:628) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:549) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at com.service.app.controller.RegisterController.confirmAccount(RegisterController.java:40) ~[classes/:na]
为什么 RestTemplate 不希望返回状态 404 作为结果? 在此输入代码
【问题讨论】:
-
你调用什么 url 来测试流程?
-
对不起。我将整个控制器映射到'/register'。这里我更正了地址。
-
HttpClientErrorException 异常何时发生,同时调用“/thanks”或“/register/token”?更多堆栈跟踪可能会有用
-
首先你需要检查你是否正确调用/register/token/{token}?如果它实际上是在 confirmAccount 方法中,您可以通过放置日志语句的断点来检查。如果它没有命中这个方法,那么问题在于调用这个方法,它也会抛出 404 但它会被 Spring 抛出。
标签: java spring rest spring-mvc spring-boot