개발 무지렁이

[Spring] 어노테이션(annotation)과 파라미터(parameter), 리턴(return) 본문

Backend/스프링

[Spring] 어노테이션(annotation)과 파라미터(parameter), 리턴(return)

Gaejirang-e 2023. 5. 5. 17:07

SERVLET BEAN 설정을 javaBase로, @annotation


<context:component-scan base-package=" " />
컨트롤러 클래스 자동스캔

🪅. Spring MVC 컨포넌트를 다음과 같은 @annotation으로 변환할 수 있다.

  web.xml => @WebServlet
  Handler Mapping => @RequestMapping
  ⚠️. MVC에서는 메서드로 호출X, URL 요청주소가 맞는 것이 중요하다.
  Controller => @Controller

Tistory's Card

return: ModelAndView, String, void


[RequestMappingController.java]

⚠️. URL 요청주소에 .do(쩜두)를 붙이는 것은 관례이다.

  @Controller
  @RequestMapping("/rem")
  public class RequestMappingController {
      /**
       * 뷰로 전달할 데이터가 있는 경우 ModelAndView return
       * 어떤 뷰로 전달할지 viewName(경로) set
       * */
      @RequestMapping("/a.do")
      public ModelAndView aa() {
          System.out.println("a.do가 요청되었습니다.");
          ModelAndView mv = new ModelAndView();
          mv.addObject("message", "Spring 재밌다.");  // ${requestScope.message}, ${message}
          mv.setViewName("result"); // prefix + result + suffix, in servlet-context.xml
          return mv;
      }

      /**
       * 여러개의 요청을 하나의 메서드로 호출 가능
       * 뷰로 전달할 데이터가 없는 경우에 String(뷰이름) return
       * 뷰의 이름과 url 요청주소가 같은 경우에는 void return
       * */
      @RequestMapping(value = {"/b.do", "/c.do"})
      public String aaaa() {
          System.out.println("b.do, c.do 요청되었음");
          return  "result" // prefix + result + suffix, in servlet-context.xml
      }
  }

파라미터(parameter)와 null 바인딩


String 같은 경우는 parameter로 넘어오지 않으면, null바인딩 되지만,
int 같은 경우는 null이 들어올 수 없으니 에러가 난다.
(int => Integer)

  @Controller
  @RequestMapping("/param")
  public class ParameterController {
      @RequestMapping("/a.do")
      public String aa(String name, Integer age) {
          System.out.println("name: " + name);
          System.out.println("age: " + age);
          return "result"
      }
  }

Controller별 공유가능한 (뷰에 전달할)데이터 설정


@ModelAttribute("별칭") on Method
이 메서드를 포함한 Controller를 거치는 모든 요청들은, 에서 ${별칭} 시용가능

  @ModelAttribute("hobbys")
  public List<String> hobbys() {
      return Arrays.asList("골프", "낚시", "수영", "놀기", "먹기");
  }        

Ajax전용 annotation


@ResponseBody: return값을 응답객체로 본다.
(리턴하는 값이 그대로 브라우저에 전송)

@RestController: controller 내 모든 메서드의 return값을 응답객체로 본다.
(@Controller + @ResponseBody)

  @RestController // @Controller + @ResponseBody
  public class ResponseBodyController {
      @RequestMapping("/responseBody.do)
      public String aa() {
          System.out.println("responseBody.do 요청입니다.");
          return "Have a nice day";
      }

      @RequestMapping(value = "/responseBody2.do", produces = "text/html;charset=UTF-8") // WAS에서 프론트단으로 보낼때 한글 인코딩
      public String bb() {
          System.out.pritnln("responseBody2.do 요청입니다.");
          return "리턴값이 그대로 브라우저에 전송";
      }
  }
Comments