스프링 MVC 설정(1) : 스프링 MVC 빈 설정

1. 스프링 MVC 빈 설정

기본 전략 객체를 커스터마이징 해서 사용하기

@Configuration
@ComponentScan
public class WebConfig {
    
    @Bean
    public HandlerMapping handlerMapping(){
        RequestMappingHandlerMapping handlerMapping = new RequestMappingHandlerMapping();
        handlerMapping.setInterceptors(); 
        // 서블릿 필터와 비슷한 역할, 모든 핸들러 매핑에 설정, 빈으로 등록될 수 있음(IoC 컨테이너의 장점을 활용할 수 있음)
        handlerMapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
        // 여러 개의 핸들러 매핑간의 우선순위를 정할 수 있음
        return handlerMapping;
    }

    @Bean
    public HandlerAdapter handlerAdapter(){
        RequestMappingHandlerAdapter handlerAdapter = new RequestMappingHandlerAdapter();
        //handlerAdapter.setArgumentResolvers();
        //handler 메소드에 Argument로 PathVariable이나 RequestParam을 사용해서 바인딩 받을 수 있다. 
        //setArgumentResolvers()를 통해 추가적인 Argument를 정의할 수 있다.
        return handlerAdapter;
    }

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}
@Controller
public class HelloController {

    @Autowired
    HelloService helloService;

    // hello/1?name=spring&age=20
    @GetMapping("/hello/{id}")
    @ResponseBody
    //public String hello(@PathVariable int id, @RequestParam String user){
    //public String hello(@PathVariable int id, @ModelAttribute User user){
    public String hello(@RequestBody String body) {
    // 요청 본문에 들어오는 값을 바인딩 받고 싶을 때
        return "Hello, " + helloService.getName();
    }

    @GetMapping("/sample")
    public void sample(){
        //return "/WEB-INF/sample.jsp";
        //return "sample";
    }
}

@RequestBody나 @ResponseBody가 쓰일 때는(json, xml 파싱 등) MessageConverter가 사용된다. 따라서 MessageConverter 기능을 사용하고 싶다면 빈으로 등록해야 한다.

기본 전략 이외에 커스텀한 기능을 추가하고 싶으면 빈으로 등록해야 한다.

참고

  • 인프런 : 스프링 웹 MVC(백기선)

좋은 웹페이지 즐겨찾기