SampleController.java
@Log4j => 로그문의 출력을 다양한 대상으로 할 수 있도록 도와주는 도구 == sysout
@Controller => @Controller 를 붙이면 해당 클래스를 웹 요청을 처리하는 컨트롤러로 사용할 수 있다.
@RequestMapping("/sample/*") => 컨트롤러가 처리할 요청 URL 을 명시하는데 사용되며, 클래스나 메서드에 적용된다.
public class SampleController {
@RequestMapping("")
public void m01() { // URL 못찾을 경우
log.info("m01() - default URL");
}
@RequestMapping("/base1")
public void m02() { // @RequestMapping 두 방식 모두 가능하다.
log.info("m02() - Get방식 & Post방식 & ...");
}
@RequestMapping(value="/base2", method=RequestMethod.GET)
public void m03() { // value="/" & method="RequestMethod.GET or POST 지정
log.info("m03() - only Get방식");
}
@RequestMapping(value="/base3", method= {RequestMethod.GET, RequestMethod.POST})
public void m04() { // 배열 {GET & POST} 모두 가능하다.
log.info("m04() - Get방식 & Post방식");
}
@RequestMapping(value="/form", method=RequestMethod.GET)
public String form() { // GET & POST 모두 가능
return "sample/form";
}
@RequestMapping("/param1")
public void m05(Human dto) { // "/param"을 통해 dto에 값을 담아준다.
log.info("m05() dto: " + dto);
}
@RequestMapping("/param2")
public void m06(@RequestParam String name, @RequestParam int age) {
// 원하는 변수만 "/param"을 통해 데이터를 받을 수 있다.
log.info("m06() name: " + name + ", age: " + age);
}
@RequestMapping("/param3")
public void m07(@RequestParam ArrayList<String> names) {
// 컬렉션을 통해 names 여러개의 데이터를 받을 수 있다.
log.info("m07() names: " + names);
}
@RequestMapping("/param4")
public void m08(@RequestParam("ns") ArrayList<String> names) {
// ns로 "/param"을 통해 데이터를 받고 names에 담아준다.
log.info("m08() names: " + names);
}
@RequestMapping("/param5")
public void m09(@RequestParam String[] names) {
// m08==컬렉션 or m09==배열이다. log.info(names)에 저장소 주소가 찍혀
EnhancedLoop를 통해 데이터를 받아 출력한다.
log.info("m09() names: " + names);
for(String name: names) log.info("name: "+ name);
}
@RequestMapping("/param6")
public void m10(HumanList hlist) { // 복수의 name & age 값들을
미리 HumanList 클래스를 만들어 파라미터안에 컬렉션의 HumanList타입을 넣어준다.
log.info("m10() hlist: " + hlist);
}
@RequestMapping("/param7")
public void m11(Human dto, @RequestParam int page) {
// name & age는 "/param"을 통해 Human타입의 dto객체에 담아주고, @RequestParam
으로 page 데이터를 받아 출력해준다.
log.info("m11() dto: " + dto + ", page: "+ page);
}
@RequestMapping("/param8") // 모든게 다 지원된다.
public void m12(ToDoDTO dto) {
<ToDoDTO>에서 cdate 멤버변수 선언방식.
//@DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")
private Date cdate; //클라이언트한테 받는 데이터다. DB추출X
log.info("m12() dto.getCdate(): " + dto.getCdate());
}
" JSON -> name-value형식의 쌍 ! 객체를 만들어서 클라이언트에게 보여주는 것이다.
ex) 연관검색어
//@RequestMapping(value="/json1", method=RequestMethod.GET) //두개는 같은거다.
@GetMapping("/json1") // GET만 된다.
public ResponseEntity<String> m13() { //JSON
String msg = "{\"name\":\"임연지\", \"age\":\"25}";
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json;charset=utf-8");
return new ResponseEntity<String>(msg, headers, HttpStatus.OK);
}
@GetMapping("/json2")
public @ResponseBody Human m14(){ //**********중요************
// @ResponseBody를 쓰게되면 @ResponseEntity보다 훨씬 간결하다 !
단, @ResponseEntity를 쓰면 HTTP 응답 헤더를 정의 할 때 유연성을 제공합니다(?).
return new Human("세종대왕", 40);
}
}