Bienvenido a nuestro sitio web, aquí vas a encontrar la solucíon a lo que buscas.
Solución:
Primavera no es compatible @javax.validation.Valid
en @PathVariable
parámetros anotados en los métodos del controlador. Hubo una solicitud de mejora, pero aún no está resuelta.
Su mejor apuesta es simplemente hacer su validación personalizada en el cuerpo del método del controlador o considerar usar org.springframework.validation.annotation.Validated
como se sugiere en otras respuestas.
Puedes usar así: use org.springframework.validation.annotation.Validated
válido RequestParam
o PathVariable
.
*
* Variant of JSR-303's @link javax.validation.Valid, supporting the
* specification of validation groups. Designed for convenient use with
* Spring's JSR-303 support but not JSR-303 specific.
*
paso.1 init ValidationConfig
@Configuration
public class ValidationConfig
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor()
MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
return processor;
paso.2 Agregar @Validated
a su clase de controlador de controlador, como:
@RequestMapping(value = "poo/foo")
@Validated
public class FooController
...
paso.3 Agregar validators
a su método de controlador:
@RequestMapping(value = "id", method = RequestMethod.DELETE)
public ResponseEntity delete(
@PathVariable("id") @Size(min = 1) @CustomerValidator int id) throws RestException
// do something
return new ResponseEntity(HttpStatus.OK);
último paso. Agregue un solucionador de excepciones a su contexto:
@Component
public class BindExceptionResolver implements HandlerExceptionResolver
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
if (ex.getClass().equals(BindException.class))
BindException exception = (BindException) ex;
List fieldErrors = exception.getFieldErrors();
return new ModelAndView(new MappingJackson2JsonView(), buildErrorModel(request, response, fieldErrors));
La solución es sencilla:
@GetMapping(value = "/", "/hash:[a-fA-F0-9]40")
public String request(@PathVariable(value = "hash", required = false) String historyHash)
// Accepted requests: either "/" or "/40 character long hash"
Y sí, las PathVariables están diseñadas para ser validadas, como cualquier entrada del usuario.
Ten en cuenta mostrar este enunciado si te fue útil.