[Spring] Chapter1 - Controller

2
post-thumbnail

✔ Spring Beginning - Controller


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);
	}
}

🍯TIP

profile
ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ 🔥

0개의 댓글