Tengo 2 servicios - Service 1
y Service 2
. Service 1
llama a algunos Service 2
API a través de la primavera Plantilla de descanso. Ahora alguna excepción ocurrió en Service 2
. Necesito toda la traza de la pila de la misma en Service 1
. Cómo conseguirlo ?
Service 1 ---calls--> Service 2
¿El seguimiento de la pila incluso van pasando a Service 1
la primavera?
Se puede decir que estoy llamando de esta manera:
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
return restTemplate.exchange("http://localhost:8080/products", HttpMethod.GET, entity, String.class).getBody();
Necesito toda la traza de la pila de la misma en servicio 1. ¿Cómo conseguirlo?
Por lo que hay maneras de conseguir que, en esencia, lo que tiene que poner en práctica. Usted puede conseguir su mensaje de excepción / trace relevante en JSON response
partir Service 2
. Es decir, cuando hay alguna exception
al Service 2
final, entonces, podemos configurar la respuesta para enviar información de excepción relevante.
En este puesto hay 3 respuestas que explican diferentes formas de lograr, también esta uno. Ahora en:
¿El seguimiento de la pila incluso van pasando al servicio 1 para la primavera?
Normalmente, cualquier no controlada / tiempo de ejecución exception
arrojado al procesar una web-request
causa que el servidor para devolver una HTTP 500
respuesta.
Así que la respuesta es la primavera no transfiere el seguimiento de la pila deService 1
vez responde con el error HTTP 500
y la probable mayor parte de su mensaje exception
.
Sin embargo, cualquier excepción que se escribe a sí mismo puede ser anotado con la @ResponseStatus
anotación (que es compatible con todos los códigos de estado HTTP definidos por la HTTP
especificación).
Cuando un annotated exception
se lanza desde un método de controlador, y no se manejan en otra parte, que hará que automáticamente el apropiado HTTP response
para ser devuelto con el estado de código especificado y con el mensaje / huella escrita. Por ejemplo,
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Account") // 404
public class AddressNotFoundException extends RuntimeException {
// ...
}
Y aquí es un método de control de usarlo:
@RequestMapping(value="/account/{id}", method=GET)
public String showOrder(@PathVariable("id") long id, Model model) {
Account account = accountServices.findAccountById(id);
if (account == null) throw new AddressNotFoundException(id);
model.addAttribute(account);
return "accountDetail";
}
Un familiarizado HTTP 404
respuesta será devuelto si la URL controlarlo mediante el método incluye un identificador de cuenta desconocida.
Espero que esto ayude.