example - spring rest validation message
Cómo integrar jersey con validación guice y bean (1)
Estoy usando jersey + guice para desarrollar la aplicación REST. Me gustaría realizar la validación de entrada para los parámetros de consulta, pero lo que estoy buscando es una solución ''lista para usar'' en lugar de escribirla yo mismo.
Ya he encontrado soporte para la validación de bean con jersey, pero desafortunadamente no tengo idea de cómo integrarlo con Guice. La mayor parte de la validación que necesito hacer es simple comprobación @NotNull. Necesito validar el valor y devolver un mensaje detallado cuando falla la validación.
¿Algunas ideas? Sugerencias?
Lo he resuelto.
En lugar de usar la extensión glassfish para jersey, usé la validación de bean apache. Se requieren agregar las siguientes dependencias al proyecto (forma gradle):
compile ''org.apache.bval:bval-guice:0.5''
compile ''javax.validation:validation-api:1.1.0.Final''
Mientras se crea el siguiente módulo guice injector, se debe agregar:
org.apache.bval.guice.ValidationModule
Así es como se ve el mapeador (maravilloso)
import com.google.inject.Singleton
import javax.validation.ConstraintViolationException
import javax.ws.rs.core.Response
import javax.ws.rs.ext.ExceptionMapper
import javax.ws.rs.ext.Provider
import static groovy.json.JsonOutput.toJson
import static javax.ws.rs.core.Response.Status.BAD_REQUEST
import static javax.ws.rs.core.Response.status
@Provider
@Singleton
class ValidationExceptionMapper implements ExceptionMapper {
@Override
Response toResponse(ConstraintViolationException e) {
status(BAD_REQUEST).entity(toJson(e.constraintViolations*.message)).build()
}
}
El asignador de excepciones debe vincularse en cualquier módulo de guice con el método bind () simple. Luego, el método con parámetros a validar debe marcarse con:
org.apache.bval.guice.Validate
Y un parámetro por ejemplo con:
javax.validation.constraints.NotNull
Eso es todo.