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
.
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
Editar: Cuando devuelvo un objeto 'Response' recibo un error' HTTP 406'. – Sydney
Al agregar los getters a la clase 'Response' se corrigió el error' HTTP 406'. 'HTTP 500' aún devuelve HTML – Sydney