La méthode du gestionnaire d'exceptions @ControllerAdvice n'est pas appelée
J'ai suivantes de la classe contrôleur
package com.java.rest.controllers;
@Controller
@RequestMapping("/api")
public class TestController {
@Autowired
private VoucherService voucherService;
@RequestMapping(value = "/redeemedVoucher", method = { RequestMethod.GET })
@ResponseBody
public ResponseEntity redeemedVoucher(@RequestParam("voucherCode") String voucherCode) throws Exception {
if(voucherCode.equals( "" )){
throw new MethodArgumentNotValidException(null, null);
}
Voucher voucher=voucherService.findVoucherByVoucherCode( voucherCode );
if(voucher!= null){
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=utf-8");
voucher.setStatus( "redeemed" );
voucher.setAmount(new BigDecimal(0));
voucherService.redeemedVoucher(voucher);
return new ResponseEntity(voucher, headers, HttpStatus.OK);
}
else{
throw new ClassNotFoundException();
}
};
}
Et de la gestion des exceptions, je suis en utilisant Spring3.2 conseils gestionnaire comme suivre
package com.java.rest.controllers;
@ControllerAdvice
public class VMSCenteralExceptionHandler extends ResponseEntityExceptionHandler{
@ExceptionHandler({
MethodArgumentNotValidException.class
})
public ResponseEntity<String> handleValidationException( MethodArgumentNotValidException methodArgumentNotValidException ) {
return new ResponseEntity<String>(HttpStatus.OK );
}
@ExceptionHandler({ClassNotFoundException.class})
protected ResponseEntity<Object> handleNotFound(ClassNotFoundException ex, WebRequest request) {
String bodyOfResponse = "This Voucher is not found";
return handleExceptionInternal(null, bodyOfResponse,
new HttpHeaders(), HttpStatus.NOT_FOUND , request);
}
}
J'ai défini XML bean définition
<context:component-scan base-package="com.java.rest" />
Exception générée à partir de contrôleur ne sont pas gérées par le contrôleur des conseils gestionnaire. J'ai cherché pendant des heures mais n'a pu trouver aucune référence pourquoi cela se produit.
J'ai suivi comme décrit http://www.baeldung.com/2013/01/31/exception-handling-for-rest-with-spring-3-2/ ici.
Si quelqu'un sait merci de laisser savoir pourquoi gestionnaire n'est pas de la manipulation d'exception.
source d'informationauteur Vishal Singh
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la solution pour le problème ci-dessus. En fait @ControllerAdvice besoins MVC déclaration d'espace de noms dans le fichier XML. Ou nous pouvons utiliser @EnableWebMvc avec @ControllerAdvice annotation.
J'ai eu le même problème.
Réussi à le résoudre en septembre 2017.
Mon cas était que le gestionnaire d'Exception a été dans sa propre com.exemple.Exceptions paquet, et le problème est qu'il n'a pas été numérisée par Printemps ComponentScan.
Solution est d'ajouter dans le ComponentScan comme suit:
et ajouter votre fève dans votre config.xml
Vous avez juste besoin d'effectuer ces 2 étapes :
Ajouter votre nom de paquet de la classe d'exception dans component-scan c'est à dire
Je pense que le problème est probablement que votre méthode de contrôleur jette
Exception
mais votre@ControllerAdvice
méthodes de capture des exceptions spécifiques. Soit les combiner en un seul gestionnaire de capturesException
ou faire votre contrôleur de jeter ces exceptions spécifiques.Pour votre contrôleur signature de la méthode devrait être:
OU votre contrôleur de conseils ne devrait avoir qu'une méthode avec l'annotation: