Ho uno scenario in Zuul in cui il servizio che l'URL viene instradato potrebbe essere inattivo. Quindi il corpo della risposta viene lanciato con 500 HTTP Status e ZuulException nella risposta del corpo JSON.Personalizzazione di Zuul Exception
{
"timestamp": 1459973637928,
"status": 500,
"error": "Internal Server Error",
"exception": "com.netflix.zuul.exception.ZuulException",
"message": "Forwarding error"
}
Tutto quello che voglio fare è personalizzare o rimuovere la risposta JSON e magari cambiare il codice di stato HTTP.
Ho tentato di creare un gestore di eccezioni con @ControllerAdvice ma l'eccezione non è stata acquisita dal gestore.
AGGIORNAMENTI:
Così ho esteso il filtro Zuul posso vederlo entrare nel metodo run dopo l'errore è stato eseguito come faccio a cambiare la risposta allora. Di seguito è quello che ho ottenuto finora. Ho letto da qualche parte su SendErrorFilter ma come faccio a implementarlo e cosa fa?
public class CustomFilter extends ZuulFilter {
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
final RequestContext ctx = RequestContext.getCurrentContext();
final HttpServletResponse response = ctx.getResponse();
if (HttpStatus.INTERNAL_SERVER_ERROR.value() == ctx.getResponse().getStatus()) {
try {
response.sendError(404, "Error Error"); //trying to change the response will need to throw a JSON body.
} catch (final IOException e) {
e.printStackTrace();
} ;
}
return null;
}
Aggiunto questo per la classe che ha @EnableZuulProxy
@Bean
public CustomFilter customFilter() {
return new CustomFilter();
}
Hai già provato qualcosa? –
Ho provato ad aggiungere un gestore di eccezioni annotando la classe con @ControllerAdvice ma non sembra funzionare. Penso di aver bisogno di fare qualcosa con Zuul Filters ma non sono sicuro di cosa deve accadere. –
OK, allora sarebbe bene che la tua domanda fosse modificata per fare questo tentativo, perché come puoi notare c'è qualche downvoter che pensava di non aver provato niente da solo. Se migliori la domanda ti darò il mio +1 perché lo considero un argomento interessante. –