JSR-303 + Spring MVC [Resolvido]

Pessoal, boa tarde!

Tenho um projeto Spring no qual tenho a utilização da especificação de validação JSR-303 (mais especificamente a implementação Hibernate Validator).

Estava tudo funcionando perfeitamente, até que a tag de configuração do Spring: <mvc:annotation-driven /> começou a conflitar em novas funcionalidades
do projeto que eu ainda estava implementando, como JSON e Jackson, portanto tive que retira-la… o que, é claro me ocasionou um trabalho extra uma
vez que esta tag traz algumas configurações prontas assim como diz o Bill Gorder neste forúm: http://www.coderanch.com/t/586286/Spring/mvc-annotation-driven-Vs-context.

E aí está meu problema, umas das facilidades que o <mvc:annotation-driven /> tras é a configuração para a utilização da especificação JSR-303.
Então gostaria de saber se alguém sabe qual seria a configuração a ser feita sem o <mvc:annotation-driven /> para o funcionamento do JSR-303.

Levo em consideração o mesmo forúm do link acima onde o Bill Gorder diz que essa tag <mvc:annotation-driven /> foi adicionada ao Spring
a partir da versão 3.0, logo acredito que antes havia alguma outra configuração! Ou não? :shock:

ai vc vai ter que mapear na mão… todos os controler… se é o que entendi… basicamente vai fazer igual era feito antes da versao 3 do spring…

Mapear na mão seria mapear via XML?

Você poderia me indicar “um norte”, tipo, algum termo que eu possa pesquisar para achar isto? (Já tentei pesquisar de várias formas ^^)

[quote=flaviochess]Mapear na mão seria mapear via XML?

Você poderia me indicar “um norte”, tipo, algum termo que eu possa pesquisar para achar isto? (Já tentei pesquisar de várias formas ^^)[/quote]

da uma olhada no site no mkyoung… sempre tem alguma coisa eheheheh

segue um link com um exemplo da especificação 303… da uma olhada e me diz se ajudou… se nao for o que procuro continuamos a ver o que pode ser feito

http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/

A tag <mvc:annotation-driven /> informa ao Spring que ele vai trabalhar com o padrão MVC e as classes serão mapeadas através das anotações @Controller.

Agora, não entendi essa de dar conflito entre a biblioteca de validação e a anotação. Você tem alguma exceção para postar aqui no blog?

darklordkamui, este link eu já havia lido, e nele pede exatamente que coloque a tag <mvc:annotation-driven />

romarcio, é que estou utilizando algumas servelets que conflitam com este cara, e com isso meu xml de configuração do MVC,
ficou + ou - de uma forma que suprime a ausência do <mvc:annotation-driven />:

<context:component-scan base-package="meusistema" />

    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
    
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
        <property name="order" value="1" />
        <property name="pathPrefix" value="/home" />
        <property name="defaultHandler">
            <!--
                If no @Controller match, map path to a view to render; e.g. the
                "/intro" path would map to the view named "intro"
            -->
            <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
        </property>
    </bean>

    <!--
    Most controllers will use the ControllerClassNameHandlerMapping above, but
    for the index controller we are using ParameterizableViewController, so we must
    define an explicit mapping for it.
    -->
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="defaultHandler">
            <!--
                Selects view names to render based on the request URI: e.g. /index
                selects "index"
            -->
            <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
        </property>
        <property name="order" value="2" />
    </bean>

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/" />
        <property name="suffix" value=".jsp" />
    </bean>


    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
    <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jacksonMessageConverter"/>
            </list>
        </property>
    </bean>

Eu até consegui utilizar um tal de validator do Spring, mas este funciona de uma forma em que eu tenho que criar um validador para cada bean
e criar a lógica de validação para cada validador, o que não é nem um pouco interessante!

Para continuar a trabalhar sem o <mvc:annotation-driven /> estou estudando este link que mostra diversas formas de se trabalhar com
validação: http://static.springsource.org/spring/docs/3.1.0.RC1/spring-framework-reference/html/validation.html#validation-beanvalidation
inclusive sem o <mvc:annotation-driven />, só está difícil de se fazer funcionar…

Eu sei, vocês devem estar pensando, por que eu estou batendo cabeça dando toda esta volta, ao invés de utilizar o <mvc:annotation-driven />
e tentar resolver os conflitos que tive?.. é que essa foi exatamente da forma que me passaram para fazer, mas considerando que o <mvc:annotation-driven />
é do Spring 3.0 em diante, acredito que seja algo que veio para facilitar e não para complicar, então este conflito acredito que ocorra, pois estou fazendo algo de uma
forma antiga… vou ter que acabar debatendo isto com os que me passaram esta tarefa.

Esse conflito acontece quando? Em tempo de compilação ou execução?

Então, romarcio

O meu objetivo era fazer funcionar sem a tag <mvc:annotation-driven />
…E consegui fazer \o/

Seguindo o link que passei http://static.springsource.org/spring/docs/3.1.0.RC1/spring-framework-reference/html/validation.html#validation-beanvalidation
fiz da seguinte forma, no meu xml de config adicionei a linha:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

e no meu controller fiz a injeção de dependencia do validador, além de retirar o @Valid do meu bean, pois desta forma que implementei eu mesmo tenho que chamar a validação:

@Autowired
private Validator validator;

@RequestMapping(method = RequestMethod.POST)
public String insert(@ModelAttribute("pessoa") Pessoa pessoa, BindingResult bindingResult) {
        
        validator.validate(entity, bindingResult);
   
        if(bindingResult.hasErrors())
        ...

Obrigado pessoal pela a atenção!
:smiley: