ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WebMvcConfigurer 설정 - 포메터 설정
    백기선(인프런 강의)/스프링 웹 MVC 2020. 9. 1. 21:17
    반응형

    Fometter

    Controller에서 URL에 값을 같이 보낼 때 문자열을 객체로 매핑해주는 역할을 하는 기능이다.

     

    Formatter에는 PrinterParser을 상속 받아 사용한다.

     

    Printer

    • 해당 객체를 (Locale 정보를 참고하여) 문자열로 어떻게 출력할 것인가

    Parser

    • 어떤 문자열을(Locale 정보를 참고하여) 객체로 어떻게 변환할 것인가

     

     

     

    기본 구성도 및 세팅

    localhost:8080/hello?jinseok 으로 들어갈 시

     

     

    @RestController
    public class SampleController {
    
    	@GetMapping("/hello/{name}")
    	public String hello(@PathVariable("name") Person person) {
    		return "hello " + person.getName();
    	}
    }

     

    public class Person {
    	private String name;
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", getName()=" + getName() + ", getClass()=" + getClass() + ", hashCode()="
    				+ hashCode() + ", toString()=" + super.toString() + "]";
    	}
    }

     

    import java.text.ParseException;
    import java.util.Locale;
    
    import org.springframework.format.Formatter;
    
    public class PsersonFormatter implements Formatter<Person> {
    
    	@Override
    	public Person parse(String text, Locale locale) throws ParseException {
    		Person person = new Person();
    		person.setName(text);
    		return person;
    	}
    
    	@Override
    	public String print(Person object, Locale locale) {
    		return object.toString();
    	}
    }

     

    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
    import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
    
    import org.junit.jupiter.api.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.test.web.servlet.MockMvc;
    
    @RunWith(SpringRunner.class)
    @WebMvcTest
    public class SampleControllerTest {
    
    	@Autowired
    	MockMvc mockMvc;
    
    	@Test
    	public void hello() throws Exception {
    		this.mockMvc.perform(get("/hello/jinseok"))
    			.andDo(print())
    			.andExpect( content().string("hello jinseok"));
    	}
    }

     

    Fometter 여러가지 방법으로 Spring에 등록할 수 있다.

    첫 번째, WebMvcConfigurer의 addFormatters(FormatterRegistry) 메소드 정의

    @Configuration
    public class WebConfig implements WebMvcConfigurer{
    
    	@Override
    	public void addFormatters(FormatterRegistry registry) {
    		registry.addFormatter(new PsersonFormatter());
    	}
    }

     

     

    두 번째, 해당 포매터를 빈으로 등록(스프링 부트 사용때만 가능)

    @Configuration
    public class PsersonFormatter implements Formatter<Person> {
    
    	@Override
    	public Person parse(String text, Locale locale) throws ParseException {
    		Person person = new Person();
    		person.setName(text);
    		return person;
    	}
    
    	@Override
    	public String print(Person object, Locale locale) {
    		return object.toString();
    	}
    }

     

     

     

     

     

    참고

    @RequestParam을 사용할 시

    @RestController
    public class SampleController {
    
    	@GetMapping("/hello")
    	public String hello(@RequestParam("name") Person person) {
    		return "hello " + person.getName();
    	}
    }

     

    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
    import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
    
    import org.junit.jupiter.api.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.test.web.servlet.MockMvc;
    
    @RunWith(SpringRunner.class)
    @WebMvcTest
    public class SampleControllerTest {
    
    	@Autowired
    	MockMvc mockMvc;
    
    	@Test
    	public void hello() throws Exception {
    		this.mockMvc.perform(get("/hello")
    				.param("name", "jinseok"))
    			.andDo(print())
    			.andExpect( content().string("hello jinseok"));
    	}
    }
    반응형
Designed by Tistory.