Backend/스프링
[Spring] 어노테이션(annotation)과 파라미터(parameter), 리턴(return)
Gaejirang-e
2023. 5. 5. 17:07

SERVLET BEAN 설정을 javaBase로, @annotation
컨트롤러 클래스 자동스캔
🪅. Spring MVC 컨포넌트를 다음과 같은 @annotation으로 변환할 수 있다.
web.xml => @WebServlet
Handler Mapping => @RequestMapping
⚠️. MVC에서는 메서드로 호출X, URL 요청주소가 맞는 것이 중요하다.
Controller => @Controller
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 바인딩
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별 공유가능한 (뷰에 전달할)데이터 설정
이 메서드를 포함한 Controller를 거치는 모든 요청들은, 뷰에서 ${별칭} 시용가능
@ModelAttribute("hobbys")
public List<String> hobbys() {
return Arrays.asList("골프", "낚시", "수영", "놀기", "먹기");
}
Ajax전용 annotation
(리턴하는 값이 그대로 브라우저에 전송)
@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 "리턴값이 그대로 브라우저에 전송";
}
}