Şu satırı dahil ederiz
import org.springframework.web.servlet.HandlerExceptionResolver;
Exception döndürmek için 3 yöntem var
- @ControllerAdvice + @ExceptionHandler : Global Exception handling yapar- HandlerExceptionResolver- ResponseStatusException
Bu sınıf direkt ResponseStatusException fırlatmaktan daha iyi, çünkü merkezi bir noktadan Exception'lar kontrol edilebilir. Bu sınıf yerine @ControllerAdvice veya @ExceptionHandler kullanılabilir.
Filtrelerden Kullanmak
Şöyle yaparız
public class AuthorizationFilter extends BasicAuthenticationFilter {
private final HandlerExceptionResolver exceptionResolver;
public AuthorizationFilter(AuthenticationManager authenticationManager,
HandlerExceptionResolver exceptionResolver) {
super(authenticationManager);
this.exceptionResolver = exceptionResolver;
}
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain)
throws IOException, ServletException {
try {
...
} catch (ExpiredJwtException e) {
exceptionResolver.resolveException(request, response, null, e);
}
}
}Örnek
Şöyle yaparız
@Component class RestResponseStatusExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) { ModelAndView model = new ModelAndView(); model.setView(new MappingJackson2JsonView()); model.addObject("exception", exception.getMessage()); return model; } } @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureHandlerExceptionResolvers( List<HandlerExceptionResolver> resolvers) { resolvers.add(0, new RestResponseStatusExceptionResolver()); } }
HTTP cevabı şöyledir
{
"serviceDownTimeException": {
"cause": null,
"stackTrace": [],
"localizedMessage": "1-2 AM is service downtime!",
"message": "1-2 AM is service downtime!",
"suppressed": []
}
}
Hiç yorum yok:
Yorum Gönder