如果您在登录时指定了不正确的数据,邮递员会给出消息“无效数据”,但是状态是"200 ok",我需要接收400状态。
@PostMapping("/login")
public Map<String, Object> performLogin(@RequestBody PersonDTO personDTO, BindingResult bindingResult) throws BadCredentialsException{
UsernamePasswordAuthenticationToken authInputToken =
new UsernamePasswordAuthenticationToken(personDTO.getUsername(),
personDTO.getPassword());
try {
authenticationManager.authenticate(authInputToken);
}
catch (BadCredentialsException e) {
return Map.of("message", "Неверные данные!");
}
String token = jwtUtil.generateToken(personDTO.getUsername());
Optional<Person> person = peopleRepository.findByUsername(personDTO.getUsername());发布于 2022-09-05 07:47:03
您可以声明全局异常处理程序,这样就不需要在控制器中捕获异常。
@ControllerAdvice
public class ErrorHandler {
@ExceptionHandler(BadCredentialsException.class)
public ResponseEntity<Map<String, Object>> badCredentialsHandler() {
return ResponseEntity.badRequest().body(Map.of("message", "invalid credentials"));
}
}请记住,异常是非常普遍的,因此根据您的用例,您可能仍然需要捕获并重新抛出它,并将其包装在一些自定义异常中,然后处理自定义异常。
如果异常包含构建响应所需的信息,或者只是为了日志记录目的,则可以在处理程序方法中自动加载它。
https://stackoverflow.com/questions/73604719
复制相似问题