ich folgende Controller-Klasse haben@ControllerAdvice Ausnahmebehandlungsverfahren sind nicht
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();
}
};
}
Und für den Umgang mit Ausnahme Ich verwende Handler Spring3.2 Rat wie folgt
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);
}
}
Ich habe XML-Bean-Definition als
0 definiertDie Ausnahme, die vom Controller ausgelöst wird, wird nicht vom Controller Advice Handler behandelt. Ich habe stundenlang gegoogelt, konnte aber keinen Hinweis finden, warum es passiert. Ich folgte wie beschrieben http://www.baeldung.com/2013/01/31/exception-handling-for-rest-with-spring-3-2/ hier.
Wenn jemand darüber informiert, lassen Sie bitte wissen, warum Handler keine Ausnahme behandelt.
Um Klarheit dieser Antwort muss die Unterklasse von ResponseEntityExceptionHandler auf dem Weg des @ComponentScan aufgenommen werden, um für den Frühling Behälter, den ihn zu erkennen. Ich denke nicht, dass die Dokumentation diesbezüglich sehr klar ist. Hoffe das spart einige Leute einige Zeit. – cwu9T9
Können Sie bitte klarstellen, was Sie unter "MVC-Namespace-Deklaration" verstehen? –
@EricB. Mit der MVC-Namespace-Deklaration meine ich, sollten wir in unserer Konfigurations-XML-Datei haben (zB applicationConfig.xml). Wenn wir in der XML-Datei nicht verwenden, müssen wir EnableWebMvc mit der Annotation ControllerAdvice verwenden. –