Saltar al contenido

¿Cómo validar los valores Spring MVC @PathVariable?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *