2014-09-09 3 views
1

J'ai environ 50 contrôleurs de ressort qui peut retourner nul dans la réponse. Comme ceci:Comment créer un gestionnaire de réponse personnalisé dans Spring MVC?

@RequestMapping(value = "/someUrl.controller", method = RequestMethod.GET) 
public @ResponseBody Object getObject(@RequestParam("id") Long id) { 
    Object object = provider.getObject(id); 
    if (object == null) { 
     return throw new EntityNotFoundException(); 
    } else { 
     return object; 
    } 
} 

@ResponseStatus(HttpStatus.NOT_FOUND) 
@ExceptionHandler(EntityNotFoundException.class) 
public @ResponseBody ExceptionDetails handleEntityNotFound(EntityNotFoundException e) { 
    return createErrorJsonView(e); 
} 

Mon but est d'éviter nul vérifier pour chaque contrôleurs et créer une gestionnaire d'exception générale pour de tels cas.

Comme je comprends l'annulation HandlerMethodReturnValueHandler le gestionnaire de printemps ce n'est pas une bonne idée.

Avez-vous des commentaires?

Merci!

+0

Vous pouvez effectuer la vérification de null dans la fonction 'provider.getObject (id)' et lancer l'exception à partir de là. – cy3er

+0

Quel est le problème avec ce '@ ExceptionHandler'? Ou est-ce que vous ne voulez pas aller refactoriser tous vos gestionnaires pour «jeter» une 'EntityNotFoundException'? Vous devriez considérer le fait que retourner null est valide dans certains cas. –

+0

En fait, je suppose que je devrais toujours gérer de tels cas en retournant null, car Spring a converti cette réponse null à vide. En fait, j'ai des problèmes avec la bibliothèque jquery, car elle s'attendait à obtenir quelque chose qui puisse être analysé. L'objectif de Mo est simplement d'éviter les vérifications nulles dans tous les contrôleurs. Dans ce cas, je peux créer un gestionnaire d'erreur général en utilisant l'annotation @ControllerAdvice. – fashuser

Répondre

0

Pour le gestionnaire d'exception, vous un objet @ControllerAdvice et enregistrez votre gestionnaire il:

@ControllerAdvice 
class GlobalControllerExceptionHandler { 


    @ResponseStatus(HttpStatus.NOT_FOUND) 
    @ExceptionHandler(EntityNotFoundException.class) 
    public @ResponseBody ExceptionDetails handleEntityNotFound(EntityNotFoundException e) { 
     return createErrorJsonView(e); 
    } 

} 

Vous pouvez trouver plus de détails ici: http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

De même, vous devriez songer à utiliser un @Initbinder à l'hydrate et validez votre objet de modèle.

+0

Actulaly Je sais comment créer un gestionnaire global, la question est de savoir comment éviter les vérifications nulles dans tous les contrôleurs. – fashuser

Questions connexes