有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ControllerAdvice不处理引发的异常

在我的InvitationService文件中引发了一个异常

if (response != null && response.getStatus() == HttpStatus.SC_CONFLICT) {
        throw new UserAlreadyExistException("User Already Exists");
}

我定义了这样一个自定义异常

public class UserAlreadyExistException extends RuntimeException{
    public UserAlreadyExistException(String message) {
        super(message);
    }
}

这是我的控制器

@RestController
@RequestMapping("/invitations")
@Api(value = "Invitation APIs")
public class InvitationController {

 @Autowired
 InvitationService invitationService;

@PostMapping
@ApiOperation(value = "Invite tenant user")
public ResponseEntity<InvitationResponseDTO> inviteTenantUser(@RequestBody InvitationRequestDTO invitationRequestDTO) {

        invitationService.invite(invitationRequestDTO);
        return new ResponseEntity<>(new InvitationResponseDTO("success"), HttpStatus.OK);
    }
}

和ControllerAdvice类

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@ControllerAdvice()
public class ControllerExceptionHandler  {

    @ExceptionHandler(UserAlreadyExistException.class)
    public ResponseEntity<Object> handleUserAlreadyExistException(UserAlreadyExistException ex) {

        return new ResponseEntity<>(ex.getMessage(), HttpStatus.CONFLICT);
    }
}

问题是,当服务中发生异常时,仍然会抛出状态代码500,当我调试时,它不会通过ControllerExceptionHandler中的断点进入


共 (2) 个答案

  1. # 1 楼答案

    您可以尝试创建这样的异常处理程序(将WebRequest作为输入参数添加到方法中):

    
    @ControllerAdvice
    public class ControllerExceptionHandler {
      
        @ExceptionHandler(CustomException.class)
        public ResponseEntity<Object> handleInputException(CustomException exception, WebRequest webRequest) {
    
           // your code here with breakpoint
           
        }
    }
    
    
  2. # 2 楼答案

    我不确定,但是尝试在异常处理程序类上使用@RestControllerAdvice而不是@ControllerAdvice

    @RestControllerAdvice
    public class ControllerExceptionHandler  {
    
      @ExceptionHandler(value = UserAlreadyExistException.class)
      public ResponseEntity<Object> 
      handleUserAlreadyExistException(UserAlreadyExistException ex) {
    
          return new ResponseEntity<>(ex.getMessage(), HttpStatus.CONFLICT);
      }
    }