2011-07-27 22 views
9

Tengo un controlador Java Spring MVC que puede arrojar una excepción. Tengo una configuración de @ExceptionHandler para manejar estos errores, y me gustaría utilizarla para devolver el mensaje de la excepción a la persona que llama.jQuery .error jqXHR.responseText está vacío

El código del servidor es:

@ExceptionHandler(DeviceException.class) 
    @ResponseStatus(HttpStatus.METHOD_FAILURE) 
    @ResponseBody 
    public String handleException(DeviceException ex) { 
     return ex.getMessage(); 
    } 

He probado lanzar una DeviceException y conseguir el resultado utilizando Curl desde la CLI, el mensaje de excepción se devuelve en el cuerpo de la respuesta. No puedo conseguir el manejador .Error jQuery para mostrarla sin embargo, mi código del controlador es:

  error: function(jqXHR, textStatus, errorThrown) { 
       // problem, the data is always blank 
       alert('jqXHR.responseText = ', jqXHR.responseText); 
      } 

lo único que recibo para el responseText es una cadena vacía. ¿Cómo obtengo la cadena devuelta por @ExceptionHandler para mostrar en el controlador de errores jQuery?

+0

Estoy molesto que es tan difícil de arregle este problema básico, tomaré cualquier ayuda que pueda obtener sin importar qué tan aleatorio :) –

+0

Tengo un problema similar. jqXHR.responseText se establece en chrome pero no en FF 3.6. Estoy PUBLICANDO 'application/x-www-form-urlencoded' y obteniendo 'application/json' - ¿es eso romper el protocolo? – rynop

+0

¿Puedes publicar la respuesta HTTP completa? –

Respuesta

0

intentar algo como esto:

var msg = '<div style="padding:20px;">'; 
msg += "We're sorry, there was an error during your request. Please refresh the page, then try again. If your problem persists, please contact technical support. <br /><br /> <b>Cause:</b> <br /> "; 
switch (textStatus) { 
    case ('timeout'): 
     msg += 'Request timed out.'; 
     break; 
    case ('error'): 
     msg += 'Error status returned.'; 
     break; 
    case ('abort'): 
     msg += 'Request was aborted.'; 
     break; 
    case ('parseerror'): 
     msg += 'There was an error parsing your request.'; 
     break; 
    default: 
     msg += 'No status returned.'; 
     break; 
} 
$(this).html(msg + ' <br /><br /> ' + errorThrown + ' <br /></div>'); 
0

que tenía un problema muy similar y extrañamente fue fijado por el cambio que proyecto para utilizar IIS Express en Visual Studio 2012.

Cuestiones relacionadas