使用ResponseEntityExceptionHandler实现我自己的处理程序

时间:2019-02-26 13:36:33

标签: java rest spring-boot handler

我编写了自己的扩展了ResponseEntityExceptionHandler的处理程序,并且希望在我的rest控制器中实现它,但是我找不到如何执行该操作的任何示例:

这是我的控制者:

@RestControllerAdvice
public class ErrorController extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(
            MethodArgumentNotValidException ex,
            HttpHeaders headers,
            HttpStatus status,
            WebRequest request) {
        return new ResponseEntity<>(ex.getBindingResult().toString(), HttpStatus.BAD_REQUEST);
    }
}

这是我的控制器方法。它应按ID返回用户:

@GetMapping(path = "/{id}")
public @ResponseBody ResponseEntity<?> getUserById(@PathVariable("id") String userId) {

        if (!usersService.existsByUserId(Integer.valueOf(userId))) {
            return new ResponseEntity<>(new CustomResponseMessage(HttpStatus.BAD_REQUEST, "UserEntity with ID=" + userId + " doesn't exist!"), HttpStatus.BAD_REQUEST);
        }

        UserEntity userEntity = usersService.findById(Integer.valueOf(userId));

        Set<String> userRoles = new HashSet<>();

        for (RoleEntity roleEntity : userEntity.getRoles()) {
            userRoles.add(new StringBuilder().append(roleEntity.getRole()).toString());
        }

        UserDTO userDTO = UserDTO.builder()
                .userId(userEntity.getUserId())
                .firstName(userEntity.getFirstName())
                .lastName(userEntity.getLastName())
                .emailLogin(userEntity.getEmailLogin())
                .isActive(userEntity.isActive())
                .department(userEntity.getDepartmentEntity().getName())
                .roles(userRoles)
                .build();


        return new ResponseEntity<>(userDTO, HttpStatus.OK);
    }

我想更改要检查用户是否存在的部分。我想使用我的处理程序。

0 个答案:

没有答案