Ajuda Bean Validation

Por favor, alguém me ajude, não sei mais o que fazer, rsrs… Estou aprendendo Java através da apostila da Caelum. Atualmente estou na parte de Spring MVC.

Cheguei no capítulo de Bean Validation (https://www.caelum.com.br/apostila-java-web/spring-mvc/#11-12-exercicios-validando-tarefas).

Estou seguindo exatamente o que a apostila diz para validar um campo nulo ou menor que 5 caracteres, porém não funciona de jeito nenhum, o formulário ignora a validação e salva o registro nulo no banco de dados. A única diferença é que não usei as libs do curso, baixei através do Maven.

Segue trechos principais das classes DTO e Controller:

TAREFA DTO

package br.com.tarefas.dto;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Tarefa {

	private Long id;

	@NotNull @Size(min=5)
	private String descricao;

(...)

TAREFA CONTROLLER

package br.com.tarefas.controller;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

import br.com.tarefas.dao.TarefaDao;
import br.com.tarefas.dto.Tarefa;

@Controller
public class TarefasController {

	@RequestMapping("novaTarefa")
	public String form() {
		return "tarefa/formulario";
	}

	@RequestMapping("adicionaTarefa")
	public String adiciona(@Valid Tarefa tarefa, BindingResult result) {
	
		if (result.hasFieldErrors("descricao")) {
			return "tarefa/formulario";
		}

		TarefaDao dao = new TarefaDao();
		dao.adiciona(tarefa);
		return "tarefa/adicionada";
	}

}

De uma verificada na diferença de @NotNull | @NotBlank | @NotEmpty.

Eu por exemplo em um projeto meu, percebi que apenas consegui fazer a validação com @NotBlank e @NotEmpty quando falando de String como propriedade.

Talvez porque a String esteja sendo tratada como uma String vazia e não uma String nula. Tem casos assim sendo explicado na internet por exemplo como a forma que JSF trata o caso.

Segue uma fonte: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/

Obrigado pelo retorno Felipe, vou tentar mas acho que não é isso… o size 5 também não funcionou…

Fiz o teste com @NotEmpty e @NotBlank… nenhum deu certo, ignorou e gravou nulo na tabela. =/

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;

public class Tarefa {

private Long id;

@NotBlank @NotEmpty @Size(min=5)
private String descricao;

(…)

O NotBlank é para validação de nulo ou vazio.
As mensagens de erro aparecem na view ?
Que estão no ValidationMessages.properties

Usa o método hasErrors só, coloca um log para vermos o retorno dele.

igomes,

Obrigado pelo retorno, tentei pelo hasFieldErrors(“descricao”) e hasErrors() e ambos os logs deram FALSE.

Parece que está ignorando a anotação @NotNull e @Size, pois consigo salvar até com menos de 5 caracteres.

Não sei mais o que pode ser, só se fiz os imports errado… =/

Pessoal, finalmente consegui !!!

Vou deixar documentado caso alguém precise.

  1. Usei o tutorial abaixo:

http://www.codejava.net/frameworks/spring/spring-mvc-form-validation-example-with-bean-validation-api

  1. Na classe modelo, além de usar o validador do Javax (javax.validation.constraints.) usei também o do Hibernate (org.hibernate.validator.constraints.). Aí sim deu certo a anotação @NotEmpty e o @Size.

  2. Faltava também configurar o arquivo de contexto do Spring MVC (no meu caso, dispatcher-servlet.xml), de acordo com a explicação do link acima (a parte do “mvc:annotation-driven”).

  3. Ainda assim, não estava dando certo, o Tomcat passou a subir com erro. Então, no POM.xml troquei a versão da dependência do “hibernate-validator” de “3.1.0.Final” para “5.0.1.Final”, conforme o usado no link acima.

Ufa, estava quase desistindo, esse último conflito de versão foi pura sorte.

Obrigado a todos que me ajudaram!

Valeu @felipes01 e @igomes !

Abraço!

Oi Leo, estou em dúvida nesse POM.xml. Também estou estudando Spring MVC pela apostila da Caelum, porém nela não aborda esse POM.xml.