2011-06-07 25 views
5

He estado tratando de conseguir que el manejo de excepciones funcione en mis simples servicios web ReST basados ​​en Spring 3. Sobre la base de todo lo que he visto, no es un error que impide que esto trabaja de forma automática con la @ResponseBody y anotaciones @ExceptionHandlerSpring 3, ReST, @ResponseBody y @ExceptionHandler

https://jira.springsource.org/browse/SPR-6902

Por lo tanto, dado que no es compatible hasta la primavera de 3.1 o 3.0.6, ¿Cuál es el mejor método actual para hacer manejo de excepciones? He visto numerosos mensajes pero no he encontrado una respuesta clara que me haya funcionado. Una solución ideal sería una que brinde automáticamente soporte para xml y json

  • ¿Debo definir manualmente toda la configuración de clasificación? ¿Esto no eliminará la necesidad de las anotaciones que hacen que valga la pena usar el soporte de descanso de Spring 3?
  • Parece el fin de definir manualmente cálculo de referencias (es decir Jaxb2Marshaller) tengo que añadir una nueva dependencia de primavera-ws que es un poco de dolor
  • ¿Es más fácil simplemente definir objeto de una 'Respuesta' que todos mis métodos devolver y ajustar todas las funciones en los bloques try/catch?
+0

relacionado: http://stackoverflow.com/questions/6014784/serialize-exceptions-to-json-with-spring-mvc – Bozho

Respuesta

7

puede redirigir el error y devolver algo en @ResponseBody:

@ExceptionHandler(Exception.class) 
public ModelAndView handleMyException(Exception exception) { 
    return new ModelAndView("redirect:errorMessage?error="+exception.getMessage()); 
} 

@RequestMapping(value="/errorMessage", method=RequestMethod.GET) 
@Responsebody 
public String handleMyExceptionOnRedirect(@RequestParameter("error") String error) { 
    return error; 
} 

poco feo, pero esto es sólo evitar hasta que la solución estará disponible.

+2

+1 para la solución alternativa. Esto también significará que el cliente tendrá que manejar la redirección. Si está esperando un resultado, podría crear un problema. Solo un poco de cabeza ... ¡Saludos! – despot

+0

Otra solución alternativa [aquí] (http://stackoverflow.com/questions/5097134/spring-exceptionhandler-does-not-work-with-responsebody/5097584#5097584) –

0

Esta es una buena solución, pero con una adición. El @ExceptionHandler (Exception.class) debe ser @ExceptionHandler (MyException.class, YourException.class), ya que puede acceder a un bucle utilizando la clase Excepción general.

Luego puede realizar una prueba (por ejemplo, instancia de Myexception) para determinar el mensaje que se mostrará si es necesario.

Cuestiones relacionadas