I want to use custom exception handlers for my application. But, it is not working properly.
Here is my code
AuthenticationFilter.java
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if (!bAuthorize) {
        chain.doFilter(request, response);
        return;
    }
    HttpServletRequest req = (HttpServletRequest) request;
    String namespace = getPathParamFromRequest(req, NAMESPACE_PATH_PREFIX);
    String userId =  getPathParamFromRequest(req, USER_PATH_PREFIX);
    AuthContext auth = null;
    RequestPathContext rpc = pathsList.getMatchingContext(req.getRequestURI(), HttpMethod.valueOf(req.getMethod()));
    if (rpc != null)
        auth = rpc.getAuthContext();
    if (auth != null) {
        // Authentication process
    } else {
        throw new UnauthorizedException();
    }
}
ApplicationExceptionHandler.java
public class ApplicationExceptionHandler {
  @ExceptionHandler(UnauthorizedException.class)
  public ResponseEntity<ErrorEntity> applicationxception(final UnauthorizedException e) {
    ErrorEntity errorEntity = new ErrorEntity(e.getNumericErrorCode(), e.getErrorCode(), e.getErrorMessage());
    return new ResponseEntity<>(errorEntity, HttpStatus.valueOf(e.getHttpStatus()));
  }
}
AuthFilterRegistration.java
@Configuration
public class AuthFilterRegistration {
  @Autowired
  private ApplicationContext context;
  @Bean
  public FilterRegistrationBean<AuthenticationFilter> loggingFilter() {
    FilterRegistrationBean<AuthenticationFilter> registrationBean
            = new FilterRegistrationBean<>();
    registrationBean.setFilter(context.getBean(AuthenticationFilter.class));
    registrationBean.addUrlPatterns( "/public/*");
    return registrationBean;
  }
  @Bean
  public AuthenticationFilter getAuthFilter() {
    return new AuthenticationFilter();
  }
  @Bean
  public ApplicationExceptionHandler getErrorHandler() {
    return new ApplicationExceptionHandler();
  }
}
ErrorEntity.java
public class ErrorEntity extends BaseErrorEntity {
  String errorMessage;
  Map<String, String> messageVariables;
  public ErrorEntity() {
  }
  public ErrorEntity(int numericErrorCode, String errorCode, String errorMessage) {
    this(numericErrorCode, errorCode, errorMessage, null);
  }
  public ErrorEntity(int numericErrorCode, String errorCode, String errorMessage, Map<String, String> messageVariables) {
    this.numericErrorCode = numericErrorCode;
    this.errorCode = errorCode;
    this.errorMessage = errorMessage;
    this.messageVariables = messageVariables;
  }
}
Using those code, I want to have an exception error like this
{
  "numericErrorCode": 2001,
  "errorCode": "errors.net.myproject.platform.unauthorized",
  "errorMessage": "unauthorized"
}
which is the instance of ErrorEntity, but I got this output
{
  "timestamp": "2019-02-01T04:41:14.337+0000",
  "status": 500,
  "error": "Internal Server Error",
  "message": "unauthorized",
}
From the example it is clear that I cannot override the default Java exception completely. Only the message part that is altered successfully. Do I miss something here?
 
    