我有我的处理程序异常,我的控制器和我为我的控制器的主体请求应用javax验证。但是,当我的主体请求的一个属性不符合验证配置时,我的处理程序不会捕获我的MethodArgumentNotValidateException。我没有在我的项目中重复@ControllerAdvice。也许Spring没有正确加载我的组件?
我的控制器:
@RestController
@RequestMapping("/consents")
public class ConsentsController {
@PostMapping(path="/altaConsentimientos")
public CompletableFuture<ResponseEntity<OutAltaConsentimientos>> postAltaConsentimiento(@Valid @RequestBody InAltaConsentimientos inDto) throws Exception{
System.out.print("Hola esto es una prueba");
// throw new Exception();
return null;
}
}
我的InAltaConstimientos:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class InAltaConsentimientos implements Serializable{
private static final long serialVersionUID = 1L;
@NotBlank(message ="usuario_id is mandatory")
@Email(message ="usuario_id is mandatory")
@JsonProperty("usuario_id")
private String id;
@NotBlank(message ="usuario_nombre is mandatory")
@JsonProperty("usuario_nombre")
private String nombre;
@NotBlank(message ="usuario_apellidos is mandatory")
@JsonProperty("usuario_apellidos")
private String apellidos;
@NotBlank(message ="usuario_email is mandatory")
@JsonProperty("usuario_email")
private String email;
@NotBlank(message ="consentimiento_fecha is mandatory")
@JsonProperty("consentimiento_fecha")
private String fechaDelConsentimiento;
@NotBlank(message ="consentimiento_tipo is mandatory")
@JsonProperty("consentimiento_tipo")
private String tipoConsentimiento;
@NotBlank(message ="consentimiento_valor is mandatory")
@JsonProperty("consentimiento_valor")
private String valorConsentimiento;
}
我的处理程序异常:
@ControllerAdvice
public class HandleValidationExceptions {
Logger logger = LoggerFactory.getLogger(HandleValidationExceptions.class);
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler({MethodArgumentNotValidException.class,Exception.class})
@ResponseBody
public ErrorMessage handleValidationExceptions(MethodArgumentNotValidException exception) {
// String message=exception.getBindingResult().getAllErrors().stream()
// .map(fieldError -> fieldError.getDefaultMessage()).collect(Collectors.joining(", "));
//
// logger.error(message, exception);
return new ErrorMessage(exception, "Malformed parameter: ");
//ResponseEntity<?> response = HttpStatus.FORBIDDEN;
//return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Campos malformateados");
}
}
My Boot应用程序类:
@SpringBootApplication(scanBasePackages={"es.","es.wsconsents","es.wsconsents.exceptions"})
//@ComponentScan({"es.servihabitat.consentimientos.api"})
public class ConsentsApplication {
public static void main(String[] args) {
SpringApplication.run(ConsentsApplication.class, args);
}
}
*我把我的处理程序异常包放在Boot类的@ScanPackage中
您已经提到在应用程序配置中添加了异常类的包,我认为问题是您没有将HandleValidationExceptions
或其包添加到配置中。如果不附加完整的类和应用程序配置,我们就无法知道这一点。