@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2014 the original author or authors .
* Copyright 2002 - 2015 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -29,14 +29,14 @@ import java.util.Date;
@@ -29,14 +29,14 @@ import java.util.Date;
import java.util.List ;
import java.util.Locale ;
import java.util.Map ;
import javax.servlet.RequestDispatcher ;
import javax.validation.constraints.NotNull ;
import com.fasterxml.jackson.databind.DeserializationFeature ;
import com.fasterxml.jackson.databind.MapperFeature ;
import com.fasterxml.jackson.databind.ObjectMapper ;
import com.fasterxml.jackson.dataformat.xml.XmlMapper ;
import org.hamcrest.Matchers ;
import org.joda.time.LocalDate ;
import org.junit.Before ;
import org.junit.Test ;
@ -52,6 +52,7 @@ import org.springframework.core.convert.ConversionService;
@@ -52,6 +52,7 @@ import org.springframework.core.convert.ConversionService;
import org.springframework.core.io.ClassPathResource ;
import org.springframework.format.annotation.DateTimeFormat ;
import org.springframework.format.annotation.DateTimeFormat.ISO ;
import org.springframework.format.annotation.NumberFormat ;
import org.springframework.format.support.FormattingConversionServiceFactoryBean ;
import org.springframework.http.MediaType ;
import org.springframework.http.converter.HttpMessageConverter ;
@ -132,6 +133,12 @@ import org.springframework.web.servlet.view.velocity.VelocityConfigurer;
@@ -132,6 +133,12 @@ import org.springframework.web.servlet.view.velocity.VelocityConfigurer;
import org.springframework.web.servlet.view.velocity.VelocityViewResolver ;
import org.springframework.web.util.UrlPathHelper ;
import com.fasterxml.jackson.databind.DeserializationFeature ;
import com.fasterxml.jackson.databind.MapperFeature ;
import com.fasterxml.jackson.databind.ObjectMapper ;
import com.fasterxml.jackson.dataformat.xml.XmlMapper ;
import static org.hamcrest.CoreMatchers.* ;
import static org.junit.Assert.* ;
/ * *
@ -142,11 +149,13 @@ import static org.junit.Assert.*;
@@ -142,11 +149,13 @@ import static org.junit.Assert.*;
* @author Jeremy Grelle
* @author Brian Clozel
* @author Sebastien Deleuze
* @author Kazuki Shimizu
* @author Sam Brannen
* /
public class MvcNamespaceTests {
public static final String VIEWCONTROLLER_BEAN_NAME = "org.springframework.web.servlet.config.viewControllerHandlerMapping" ;
private GenericWebApplicationContext appContext ;
private TestController handler ;
@ -165,7 +174,7 @@ public class MvcNamespaceTests {
@@ -165,7 +174,7 @@ public class MvcNamespaceTests {
appContext . getServletContext ( ) . setAttribute ( attributeName , appContext ) ;
handler = new TestController ( ) ;
Method method = TestController . class . getMethod ( "testBind" , Date . class , TestBean . class , BindingResult . class ) ;
Method method = TestController . class . getMethod ( "testBind" , Date . class , Double . class , TestBean . class , BindingResult . class ) ;
handlerMethod = new InvocableHandlerMethod ( handler , method ) ;
}
@ -211,6 +220,7 @@ public class MvcNamespaceTests {
@@ -211,6 +220,7 @@ public class MvcNamespaceTests {
// default web binding initializer behavior test
request = new MockHttpServletRequest ( "GET" , "/" ) ;
request . addParameter ( "date" , "2009-10-31" ) ;
request . addParameter ( "percent" , "99.99%" ) ;
MockHttpServletResponse response = new MockHttpServletResponse ( ) ;
HandlerExecutionChain chain = mapping . getHandler ( request ) ;
@ -222,6 +232,8 @@ public class MvcNamespaceTests {
@@ -222,6 +232,8 @@ public class MvcNamespaceTests {
adapter . handle ( request , response , handlerMethod ) ;
assertTrue ( handler . recordedValidationError ) ;
assertEquals ( LocalDate . parse ( "2009-10-31" ) . toDate ( ) , handler . date ) ;
assertEquals ( Double . valueOf ( 0 . 9999 ) , handler . percent ) ;
CompositeUriComponentsContributor uriComponentsContributor = this . appContext . getBean (
MvcUriComponentsBuilder . MVC_URI_COMPONENTS_CONTRIBUTOR_BEAN_NAME ,
@ -718,7 +730,7 @@ public class MvcNamespaceTests {
@@ -718,7 +730,7 @@ public class MvcNamespaceTests {
assertEquals ( TilesViewResolver . class , resolvers . get ( 2 ) . getClass ( ) ) ;
resolver = resolvers . get ( 3 ) ;
FreeMarkerViewResolver freeMarkerViewResolver = ( FreeMarkerViewResolver ) resolver ;
assertThat ( resolver , instanceOf ( FreeMarkerViewResolver . class ) ) ;
accessor = new DirectFieldAccessor ( resolver ) ;
assertEquals ( "freemarker-" , accessor . getPropertyValue ( "prefix" ) ) ;
assertEquals ( ".freemarker" , accessor . getPropertyValue ( "suffix" ) ) ;
@ -726,14 +738,14 @@ public class MvcNamespaceTests {
@@ -726,14 +738,14 @@ public class MvcNamespaceTests {
assertEquals ( 1024 , accessor . getPropertyValue ( "cacheLimit" ) ) ;
resolver = resolvers . get ( 4 ) ;
VelocityViewResolver velocityViewResolver = ( VelocityViewResolver ) resolver ;
assertThat ( resolver , instanceOf ( VelocityViewResolver . class ) ) ;
accessor = new DirectFieldAccessor ( resolver ) ;
assertEquals ( "" , accessor . getPropertyValue ( "prefix" ) ) ;
assertEquals ( ".vm" , accessor . getPropertyValue ( "suffix" ) ) ;
assertEquals ( 0 , accessor . getPropertyValue ( "cacheLimit" ) ) ;
resolver = resolvers . get ( 5 ) ;
GroovyMarkupViewResolver groovyMarkupViewResolver = ( GroovyMarkupViewResolver ) resolver ;
assertThat ( resolver , instanceOf ( GroovyMarkupViewResolver . class ) ) ;
accessor = new DirectFieldAccessor ( resolver ) ;
assertEquals ( "" , accessor . getPropertyValue ( "prefix" ) ) ;
assertEquals ( ".tpl" , accessor . getPropertyValue ( "suffix" ) ) ;
@ -742,7 +754,6 @@ public class MvcNamespaceTests {
@@ -742,7 +754,6 @@ public class MvcNamespaceTests {
assertEquals ( InternalResourceViewResolver . class , resolvers . get ( 6 ) . getClass ( ) ) ;
assertEquals ( InternalResourceViewResolver . class , resolvers . get ( 7 ) . getClass ( ) ) ;
TilesConfigurer tilesConfigurer = appContext . getBean ( TilesConfigurer . class ) ;
assertNotNull ( tilesConfigurer ) ;
String [ ] definitions = {
@ -841,6 +852,12 @@ public class MvcNamespaceTests {
@@ -841,6 +852,12 @@ public class MvcNamespaceTests {
public @interface IsoDate {
}
@NumberFormat ( style = NumberFormat . Style . PERCENT )
@Target ( { ElementType . PARAMETER } )
@Retention ( RetentionPolicy . RUNTIME )
public @interface PercentNumber {
}
@Validated ( MyGroup . class )
@Target ( { ElementType . PARAMETER } )
@Retention ( RetentionPolicy . RUNTIME )
@ -850,10 +867,14 @@ public class MvcNamespaceTests {
@@ -850,10 +867,14 @@ public class MvcNamespaceTests {
@Controller
public static class TestController {
private Date date ;
private Double percent ;
private boolean recordedValidationError ;
@RequestMapping
public void testBind ( @RequestParam @IsoDate Date date , @MyValid TestBean bean , BindingResult result ) {
public void testBind ( @RequestParam @IsoDate Date date , @RequestParam ( required = false ) @PercentNumber Double percent , @MyValid TestBean bean , BindingResult result ) {
this . date = date ;
this . percent = percent ;
this . recordedValidationError = ( result . getErrorCount ( ) = = 1 ) ;
}
}
@ -965,5 +986,4 @@ public class MvcNamespaceTests {
@@ -965,5 +986,4 @@ public class MvcNamespaceTests {
}
}
}