2017-03-19 2 views
0

J'ai fait un projet comme celui-ci sample. Donc les contrôleurs sont comme çaSpring boot comment gérer throwable

package mypackagename.controller; 

import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.bind.annotation.RequestMapping; 

@RestController 
@RequestMapping("/") 
public class StoresRestController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String stores() { 
     return ... 
    } 

} 

J'aime manipuler tous les jetables et faire ma réponse unifiée adaptée aux besoins du client. Le problème est que je ne peux pas trouver un guide ou un échantillon pour le faire correctement. Tout d'abord, j'ai essayé ExceptionHandler, avec Throwable, mais cela n'a pas fonctionné, j'ai donc décidé de passer à autre chose. Ensuite, l'approche la plus proche que j'ai trouvée est this, alors j'ai essayé jersey, en ajoutant quelque chose comme this. Mais ça ne marche pas pour tous les jetables. En outre, il est ignorant mes contrôleurs, en se plaignant

o.g.jersey.internal.inject.Providers  : A provider mypackagename.controller.StoresRestController registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider mypackagename.controller.StoresRestController will be ignored. 

Je recherchais cette erreur et a trouvé this, que je ne suis pas en utilisant ContainerResponseFilter dans mon projet que j'ai fourni l'exemple ci-dessus. Donc, je suis désemparé. Le principal problème est de savoir comment gérer tous les jetables, mais si vous pouvez me donner quelques suggestions sur la façon de résoudre le problème , je serai très apprécié.

+0

Merci, j'ai aussi essayé @ExceptionHandler. Mais si je comprends bien, ils ne sont pas conçus pour gérer tous les jetables. – hadilq

+0

En fait, comme je l'ai expliqué, j'ai essayé ExceptionHandler avec throwable, mais ça n'a pas fonctionné, alors j'ai essayé d'autres solutions comme jersey. – hadilq

+0

Il n'y a aucune exception spéciale que je veux attraper. Je veux avoir une réponse unifiée quand mon application jette toutes sortes d'exceptions. Par exemple, je ne veux pas d'horodatage dans ma réponse, qui est incluse dans les réponses printanières standard. – hadilq

Répondre

0

Enfin this poste m'a aidé à gérer tous Throwable s, sauf exceptions d'authentification. L'important était d'utiliser @EnableWebMvc et ResponseEntityExceptionHandler. Pour gérer les exceptions d'authentification, j'ai utilisé la réponse this. J'espère que ça aide quelqu'un.

0

Dans mon projet, j'utilise @ControllerAdvice pour gérer mes exceptions. Voici un exemple. J'espère que cela t'aides. Assurez-vous simplement que cette classe est sur votre analyse des composants afin qu'elle soit ramassée.

@RestController 
@ControllerAdvice 
public class StoresExceptionHandler { 

    @ExceptionHandler(Throwable.class) 
    public ResponseEntity<Object> handleThrowable(final Throwable ex) { 
     return new ResponseEntity<Object>("Unable to process request.", HttpStatus.INTERNAL_SERVER_ERROR); 
    } 
}