본문 바로가기

Spring Boot

spring boot webflux로 Hello World 찍어보기

어찌 저찌 성공은 한듯.......해서...

기념으로다 블로그에 포스팅....ㅎ

package kr.pe.fountain.web.index;


import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.test.web.reactive.server.WebTestClient.BodySpec;

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {IndexRouter.class, IndexHandler.class, IndexService.class})
@WebFluxTest
public class IndexTest {

//	private static final Logger logger = LoggerFactory.getLogger(IndexTest.class);

	@Autowired
    private WebTestClient webClient;
	
	@Test
	public void testWithParameter() {
		BodySpec<String, ?> bodyStr = webClient.get().uri("/{name}", "KS").accept(MediaType.TEXT_HTML)
                             .exchange()
                             .expectStatus().isOk()
                             .expectBody(String.class);
		
		assertTrue(bodyStr.returnResult().getResponseBody().contains("KS"));
	}
	
	@Test
	public void testWithoutParameter() {
		BodySpec<String, ?> bodyStr = webClient.get().uri("/").accept(MediaType.TEXT_HTML)
                             .exchange()
                             .expectStatus().isOk()
                             .expectBody(String.class);

		assertTrue(bodyStr.returnResult().getResponseBody().contains("World"));
	}

}
package kr.pe.fountain.web.index;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.RequestPredicates;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;

@Configuration
public class IndexRouter {
    @Bean
    public RouterFunction<ServerResponse> route(IndexHandler indexHandler) {

        return RouterFunctions.route(RequestPredicates.GET("/"), indexHandler::hello)
        		.andRoute(RequestPredicates.GET("/{name}"), indexHandler::hello);

    }
}
package kr.pe.fountain.web.index;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;

import reactor.core.publisher.Mono;

@Component
public class IndexHandler {

//	private static final Logger logger = LoggerFactory.getLogger(IndexHandler.class);
	
	@Autowired IndexService indexService;

	Mono<ServerResponse> hello(ServerRequest request) {
		String retMsg = request.pathVariables().containsKey("name")==false?null:request.pathVariable("name");
		String response = indexService.hello(retMsg);

		Map<String, Object> renderAttributes = new HashMap<>();
		renderAttributes.put("name", response);

		return ServerResponse.ok().contentType(MediaType.TEXT_HTML).render("index", renderAttributes);
	}
}
package kr.pe.fountain.web.index;

import org.springframework.stereotype.Component;

@Component
public class IndexService {

//	private static final Logger logger = LoggerFactory.getLogger(IndexService.class);
	
	public String hello(String paramStr) {
		String returnStr;
		if( paramStr==null ) returnStr = "World!";
		else returnStr = paramStr;
		return "Hello, " + returnStr;
	}

}
728x90

'Spring Boot' 카테고리의 다른 글

spring boot에서 jpa와 h2디비 세팅  (0) 2022.12.08
[펌] spring boot msa  (0) 2021.10.20
spring boot에서 mybatis 테스트하기  (0) 2019.04.19
spring boot webflux, 테스트 하기~  (0) 2019.02.20