2011-04-12 15 views
6

Tengo un Controller y quiero recibir comentarios del usuario sobre lo que salió mal. La devolución de llamada de error se ejecuta pero el mensaje de error no se envía de vuelta al cliente.Manipulación de excepciones de Spring 3 con JSON

La llamada jQuery:

var validateButton = $('#validateSteps'); 
validateButton.bind('click', function() { 
    var stepsInput = $(':input').serializeArray(); 
    $.postJSON('validate.htm', stepsInput, function(data) { 
     alert(data); 
     var steps = $('#steps'); 
     var i = 0; 
     for(i=0;i<data.length;i++) { 
      steps.stepWidget('setValidationStatus', {testStepId: data[i].testStepId, interactionType: data[i].interactionType, validationStatus: data[i].validationStatus}); 
      steps.stepWidget('setErrorDescriptions', {testStepId: data[i].testStepId, interactionType: data[i].interactionType, errorDescriptions: data[i].errorDescriptions}); 
     } 
     return false; 
    }, { 
      error: function (XMLHttpRequest, textStatus, errorThrown, data) { 
       alert("error function"); 
       alert(textStatus); 
       alert(errorThrown);    
       alert("Internal Server Error: " + data); 
      return false; 
     } 
    }); 
    return false; 
}); 

El controlador:

@RequestMapping(value = "validate.htm", method = RequestMethod.POST) 
public @ResponseBody 
List<ValidationBean> validateSteps(
     @RequestBody List<Map<String, String>> testCaseInputs, 
     HttpServletResponse response) throws MalformedMessageException, 
     MalformedProfileException, XmlException, IOException, 
     MissingDependencyException, MessageValidationException { 
    List<ValidationBean> validations = new ArrayList<ValidationBean>(); 
    ... 
    return validations; 
} 

gestor de excepciones en el controlador:

@ExceptionHandler(Exception.class) 
public @ResponseBody 
String handleException(Exception e, HttpServletResponse response) { 
    response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
    return e.getMessage(); 
} 

Lo que quiero mostrar al usuario es la String que debe ser devuelto por el método handleException. En la devolución de llamada error, el parámetro data es undefined.

Respuesta

3

Compruebe hacia fuera mi respuesta a una pregunta muy similar: Spring MVC returning JSONS and exception Handling

+0

I intentado pero todavía tengo el mismo comportamiento. Cuando se lanza una excepción, se llama a 'handleException' y se devuelve un' HTTP 500'. En Firebug, la respuesta no es 'JSON' sino' HTML' en el caso del 'HTTP 500'. Para un 'HTTP 200' se devuelve JSON. – Sydney

+0

Editar: Cuando devuelvo un objeto 'Response' recibo un error' HTTP 406'. – Sydney

+0

Al agregar los getters a la clase 'Response' se corrigió el error' HTTP 406'. 'HTTP 500' aún devuelve HTML – Sydney

Cuestiones relacionadas