GitHub

https://github.com/Choidongjun0830

Spring

Spring MVC-2

gogi masidda 2023. 12. 24. 14:31
@Controller
public class SpringMemberFormControllerV1 {

    @RequestMapping("/springmvc/v1/members/new-form")
    public ModelAndView process() {
        return new ModelAndView("new-form");
    }
}

@Controller : 스프링이 자동으로 스프링 빈으로 등록한다. (내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 됨), 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다(RequestMappingHandlerMapping에서 ).
@RequestMapping : 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.
ModelAndView : 모델과 뷰 정보를 담아서 반환하면 된다.

RequestMappingHandlerMapping 은 스프링 빈 중에서 @RequestMapping 또는 @Controller 가
클래스 레벨에 붙어 있는 경우에 매핑 정보로 인식한다.

@Component //컴포넌트 스캔을 통해 스프링 빈으로 등록
@RequestMapping
public class SpringMemberFormControllerV1 {
	@RequestMapping("/springmvc/v1/members/new-form")
 	public ModelAndView process() {
 		return new ModelAndView("new-form");
 	}
}

위와 동일한 동작을 하는 코드

컨트롤러 통합 가능

@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/new-form")
    public ModelAndView newForm() {
        return new ModelAndView("new-form");
    }
    @RequestMapping("/save")
    public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);

        ModelAndView mv = new ModelAndView("save-result");
        mv.addObject("member", member);
        return mv;
    }
    @RequestMapping
    public ModelAndView members() {
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members", members);
        return mv;
    }

}

 

실용적인 방식

@Controller
@RequestMapping("/springmvc/v3/members") //Requst
public class SpringMemberControllerV3 {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    //@RequestMapping(value = "/new-form", method = RequestMethod.GET) // GET인 경우에만 호출
    @GetMapping("/new-form")
    public String newForm() { //문자로 반환하면 View이름으로 알고 진행
        return "new-form";
    }
    //@RequestMapping(value = "/save", method = RequestMethod.POST)
    @PostMapping("/save")
    public String save( //request, response를 받아 파라미터를 뽑을 필요없이 그대로 파라미터에 사용가능
            @RequestParam("username") String username,
            @RequestParam("age") int age, //타입 변환도 자동으로
            Model model) {

        Member member = new Member(username, age);
        memberRepository.save(member);

        model.addAttribute("member", member); //파라미터로 넘어온 모델에
        return "save-result";
    }
    //@RequestMapping(method = RequestMethod.GET)
    @GetMapping
    public String members(Model model) {
        List<Member> members = memberRepository.findAll();

        model.addAttribute("members", members);
        return "members";
    }
}

@RequestMapping @GetMapping, @PostMapping
@RequestMapping 은 URL만 매칭하는 것이 아니라, HTTP Method도 함께 구분할 수 있다.

@RequestMapping(value = "/new-form", method = RequestMethod.GET)
이것을 @GetMapping , @PostMapping 으로 더 편리하게 사용할 수 있다.

728x90

'Spring' 카테고리의 다른 글

thymeleaf-1  (0) 2023.12.31
로깅  (0) 2023.12.24
MVC 프레임워크 / Spring MVC-1  (1) 2023.12.21
[Spring] 빈 생명주기 콜백  (0) 2023.09.08
[Spring] Component Scan  (0) 2023.09.02