Archive for the ‘spring’ Category
@RequestParam intercettare gli errori e modificare la risposta
con spring è comodissimo ricevere i parametri delle richieste utilizzando l’annotazione @RequestParam
per esempio
@RequestMapping(“/getCorrelatiProdotti.do”)
public @ResponseBody Object getRelatedProductsHttpGet (
@RequestParam(value = “skuItem”, required = true) String sku,
@RequestParam(value = “idSito”, defaultValue = “0”) String idSito,
@RequestParam(defaultValue=”true”) boolean jsonp,
ModelMap model)
definisce diversi parametri tra cui uno obbligatorio, e uno booleano. Se il parametro obbligatorio manca o il booleano riceve un testo che booleano non può essere (vale anche per numeri ecc) normalmente viene inviata una risposta in stato http 400.
Avendo la necessità di rispondere un JSON anche in caso di errore ho dovuto modificare questo comportamento. Dopo un sacco di ricerche ho trovato il modo per farlo
@ExceptionHandler(MissingServletRequestParameterException.class)
public @ResponseBody Object handleMyException(Exception exception, HttpServletRequest request,
HttpServletResponse response) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
/** omissis prepara degli oggetti con la descrizione degli errori */
Map<String,Object> ret = new HashMap<String, Object>();
ret.put(“State”, state);
ret.put(“error”, error);
return ret;
}
L’annotazione @ExceptionHandler permette di intercettare l’eccezione, i parametri del metodo possono essere i più disparati, tra cui l’eccezione, la request e la response.
a questo punto non bisogna fare altro che restituire un oggetto con la struttura che si vuole inviare al client.