yepdi / TIL

Today I Learn
0 stars 0 forks source link

RestController vs Controller #24

Open yepdi opened 2 years ago

yepdi commented 2 years ago

Spring Controller Annotation

@Controller

  1. Client가 URI 형식으로 web service request
  2. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다
  3. HandlerMapping을 통해 요청을 Controller에게 위임
  4. Controller는 요청을 처리한 후에 ViewName을 반환
  5. DispatcherServlet은 ViewResolver를 통해 Viewname에 해당하는 View를 찾아 사용자에게 반환
@Controller
class ExampleController {

  @GetMapping(value = "/users")
  public String detailView(Model model, @RequestParam("userName") String username) {
      User user ...
      model.addAttribute("user", user);
      return "/detailView";    // ViewName 반환
  } 

  @PostMapping(value = "/updateUser")
  @ResponseBody
   public ResponseEntity<User> updateUser(@RequestBody User userRequest) {
          return ResponseEntity.ok(userRepository.save(userRequest.to())); // 물론 Dto로 변환해서 보내야 하지만 예제므로 생략  
   }
}

@RestController

  1. Client가 URI 형식으로 web service request
  2. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다
  3. HandlerMapping을 통해 요청을 Controller에게 위임
  4. Controller는 요청을 처리한 후에 객체를 반환
  5. 반환된 객체는 Json으로 Serialize되어 사용자에게 반환된다
@Controller
class ExampleController {

  @GetMapping(value = "/users")
  public User findUser(@RequestParam("userName") String username) {
      return userService.findUser(user);
  } 

  @GetMapping(value = "/users")
    public ResponseEntity<User> findUserWithResponseEntity(@RequestParam("userName") String userName){
        return ResponseEntity.ok(userService.findUser(user));
    }
}

출처 : https://mangkyu.tistory.com/49

yepdi commented 2 years ago

RequestBody vs RequestParam

@GetMapping("/receive")
public String age(@RequestParam("name") Sting name) {  // /receive?name=Hulk
    return ...
}
@PostMapping("/members")
public String saveMember(@RequestBody Member member) {
     ....
}

여기서 /members 주소와 함께 Json 형태로 보내는 경우에는 Member 객체에 값이 담긴다

물론 RequestBody, RequestParam 모두 Map<String, String> 으로 결과를 받아올 수 있다

출처 : https://ocblog.tistory.com/49, https://koonsland.tistory.com/206

yepdi commented 2 years ago

RequestMapping vs GetMapping, PostMapping

Spring 4.3 버전부터 Spring MVC 컨트롤 메소드를 위한 어노테이션 추가

@RequestMapping(value="/user", method = RequestMapping.Post)

@PostMapping("/user")

@RequestMapping(value="/user", method = RequestMapping.Post, produces="application/json", consumes="application/json")

출처 : https://blog.naver.com/PostView.nhn?blogId=writer0713&logNo=221422059349