[RESOLVIDO] VRaptor Validações

5 respostas
Sad7

Bom dia pessoal,

Estou iniciando uma aplicação simples utilizando o Vraptor e estou com um problema, nao sei se isso é conhecido e tem um motivo, porém vamos la.

Tenho um modelo UserModel:

public class UserModel{

	private Integer 		id;
        public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
}

Possuo um UserController que contem um metodo de insersao e nao retorna para pagina nehuma, somente status code:

@Post
	public void insert(UserModel user) {
		try { 
                        //TODO inseririr usuario
			validator.onErrorUsePageOf(RegisterController.class).errors();
			
			// Set result status as OK
			result.use(Results.nothing());
		} catch (Exception e) {
			// Set result status as ERROR
			result.use(Results.status()).badRequest(e.getMessage());
		}
	}

Se meu form de cadastro nao enviar o atributo id, eu não consigo redirecionar o status code 200, pois da erro de validacao por ter atributos nulo.
Talvez se eu colocar o tipo do id como int e nao Integer funcione pois o valor dele sera 0 e nao null, mas no meu caso o tipo nao pode ser primitivo.

Alguem ja passou por isso antes?
Obrigado.

5 Respostas

Sad7

Testando melhor aqui, esse problema na validação acontece somente com a classe Integer, se eu nao mandar no meu form algum atributo de outro tipo nao da erro nehum.
Para resolver no meu objeto UserModel eu coloquei um valor default para o id:

private Integer id = 0;

Para mim nao tem problema, mas talvez isso seja um bug.

Lucas_Cavalcanti
validator.onErrorUsePageOf(RegisterController.class).errors();

essa chamada pode lançar uma ValidationException, que o VRaptor vai tratar… não faça try…catch em volta dela…

se vc quer que lance badrequest, coloque:

validator.onErrorSendBadRequest();
Sad7

Tudo bem sobre isso, mas e sobre o vraptor lançar exceção somente no caso de Integer nullo? E ele nao deveria lançar exceção somente se eu estivesse validando o campo?

edit–
e ja aproveitando o topico, sobre parametros do tipo Timestamp, como o VRaptor trata isso? Eu posso passar no meu post um formato de data que ele consegue fazer o cast, ou eu preciso passar o milliseconds como Long e tratar no controller?

Obrigado.

Lucas_Cavalcanti

o vraptor não lança exception pra Integer nulo… algum lugar da sua aplicação deve estar fazendo isso.

o que ele faz é se o campo vier vazio na requisição ele seta null. vc pode sobrescrever esse comportamento criando um converter pra Integer.

vc tá usando o tipo java.sql.Timestamp? se sim, vc precisa criar um converter pra ele. O vraptor só tem converters por padrão pra Date, Calendar e os tipos do joda-time, sugiro dar uma olhada neles.

Sad7

HUm entendi, muito legal esses Convertes, usei eles e deu certo aqui.
Obrigado Lucas.

Criado 27 de agosto de 2012
Ultima resposta 28 de ago. de 2012
Respostas 5
Participantes 2