@ -20,6 +20,7 @@ import java.net.URI;
@@ -20,6 +20,7 @@ import java.net.URI;
import java.nio.ByteBuffer ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.Collections ;
import java.util.List ;
import java.util.concurrent.CompletableFuture ;
@ -38,6 +39,7 @@ import org.springframework.context.annotation.Bean;
@@ -38,6 +39,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration ;
import org.springframework.core.ParameterizedTypeReference ;
import org.springframework.core.ResolvableType ;
import org.springframework.core.codec.Encoder ;
import org.springframework.core.codec.support.ByteBufferEncoder ;
import org.springframework.core.codec.support.JacksonJsonEncoder ;
import org.springframework.core.codec.support.JsonObjectEncoder ;
@ -56,6 +58,8 @@ import org.springframework.http.RequestEntity;
@@ -56,6 +58,8 @@ import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity ;
import org.springframework.http.server.reactive.AbstractHttpHandlerIntegrationTests ;
import org.springframework.http.server.reactive.HttpHandler ;
import org.springframework.stereotype.Controller ;
import org.springframework.ui.Model ;
import org.springframework.web.bind.annotation.ExceptionHandler ;
import org.springframework.web.bind.annotation.RequestBody ;
import org.springframework.web.bind.annotation.RequestMapping ;
@ -63,7 +67,11 @@ import org.springframework.web.bind.annotation.RequestParam;
@@ -63,7 +67,11 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController ;
import org.springframework.web.client.RestTemplate ;
import org.springframework.web.reactive.DispatcherHandler ;
import org.springframework.web.reactive.ViewResolver ;
import org.springframework.web.reactive.handler.SimpleHandlerResultHandler ;
import org.springframework.web.reactive.view.ViewResolverResultHandler ;
import org.springframework.web.reactive.view.freemarker.FreeMarkerConfigurer ;
import org.springframework.web.reactive.view.freemarker.FreeMarkerViewResolver ;
import org.springframework.web.server.adapter.WebHttpHandlerBuilder ;
import static org.junit.Assert.assertArrayEquals ;
@ -291,6 +299,18 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@@ -291,6 +299,18 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
create ( "http://localhost:" + this . port + "/observable-create" ) ;
}
@Test
public void html ( ) throws Exception {
RestTemplate restTemplate = new RestTemplate ( ) ;
URI url = new URI ( "http://localhost:" + port + "/html?name=Jason" ) ;
RequestEntity < Void > request = RequestEntity . get ( url ) . accept ( MediaType . TEXT_HTML ) . build ( ) ;
ResponseEntity < String > response = restTemplate . exchange ( request , String . class ) ;
assertEquals ( "<html><body>Hello: Jason!</body></html>" , response . getBody ( ) ) ;
}
private void serializeAsPojo ( String requestUrl ) throws Exception {
RestTemplate restTemplate = new RestTemplate ( ) ;
@ -350,7 +370,7 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@@ -350,7 +370,7 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
ResponseEntity < Void > response = restTemplate . exchange ( request , Void . class ) ;
assertEquals ( HttpStatus . OK , response . getStatusCode ( ) ) ;
assertEquals ( 2 , this . wac . getBean ( TestController . class ) . persons . size ( ) ) ;
assertEquals ( 2 , this . wac . getBean ( TestRest Controller . class ) . persons . size ( ) ) ;
}
@ -358,6 +378,9 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@@ -358,6 +378,9 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@SuppressWarnings ( "unused" )
static class FrameworkConfig {
private DataBufferAllocator allocator = new DefaultDataBufferAllocator ( ) ;
@Bean
public RequestMappingHandlerMapping handlerMapping ( ) {
return new RequestMappingHandlerMapping ( ) ;
@ -382,16 +405,42 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@@ -382,16 +405,42 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@Bean
public ResponseBodyResultHandler responseBodyResultHandler ( ) {
DataBufferAllocator allocator = new DefaultDataBufferAllocator ( ) ;
return new ResponseBodyResultHandler ( Arrays . asList (
new ByteBufferEncoder ( allocator ) , new StringEncoder ( allocator ) ,
new JacksonJsonEncoder ( allocator , new JsonObjectEncoder ( allocator ) ) ) ,
conversionService ( ) ) ;
List < Encoder < ? > > encoders = Arrays . asList (
new ByteBufferEncoder ( this . allocator ) , new StringEncoder ( this . allocator ) ,
new JacksonJsonEncoder ( this . allocator , new JsonObjectEncoder ( this . allocator ) ) ) ;
ResponseBodyResultHandler resultHandler = new ResponseBodyResultHandler ( encoders , conversionService ( ) ) ;
resultHandler . setOrder ( 1 ) ;
return resultHandler ;
}
@Bean
public SimpleHandlerResultHandler simpleHandlerResultHandler ( ) {
return new SimpleHandlerResultHandler ( conversionService ( ) ) ;
SimpleHandlerResultHandler resultHandler = new SimpleHandlerResultHandler ( conversionService ( ) ) ;
resultHandler . setOrder ( 2 ) ;
return resultHandler ;
}
@Bean
public ViewResolverResultHandler viewResolverResultHandler ( ) {
List < ViewResolver > resolvers = Collections . singletonList ( freeMarkerViewResolver ( ) ) ;
ViewResolverResultHandler resultHandler = new ViewResolverResultHandler ( resolvers , conversionService ( ) ) ;
resultHandler . setOrder ( 3 ) ;
return resultHandler ;
}
@Bean
public ViewResolver freeMarkerViewResolver ( ) {
FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver ( "" , ".ftl" ) ;
viewResolver . setBufferAllocator ( this . allocator ) ;
return viewResolver ;
}
@Bean
public FreeMarkerConfigurer freeMarkerConfig ( ) {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer ( ) ;
configurer . setPreferFileSystemAccess ( false ) ;
configurer . setTemplateLoaderPath ( "classpath*:org/springframework/web/reactive/view/freemarker/" ) ;
return configurer ;
}
}
@ -400,6 +449,11 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@@ -400,6 +449,11 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@SuppressWarnings ( "unused" )
static class ApplicationConfig {
@Bean
public TestRestController testRestController ( ) {
return new TestRestController ( ) ;
}
@Bean
public TestController testController ( ) {
return new TestController ( ) ;
@ -409,7 +463,7 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@@ -409,7 +463,7 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@RestController
@SuppressWarnings ( "unused" )
private static class TestController {
private static class TestRest Controller {
final List < Person > persons = new ArrayList < > ( ) ;
@ -601,6 +655,18 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
@@ -601,6 +655,18 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
}
@Controller
@SuppressWarnings ( "unused" )
private static class TestController {
@RequestMapping ( "/html" )
public String getHtmlPage ( @RequestParam String name , Model model ) {
model . addAttribute ( "hello" , "Hello: " + name + "!" ) ;
return "test" ;
}
}
private static class Person {
private String name ;