ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2.2.4 매개변수를 넘겨받는 방법
    Spring/웹 개발 101 2022. 4. 8. 01:17
    반응형

    @PathVariable 을 사용하면 됩니다. 

    package com.example.demo.controller;
    
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    
    @RestController
    @RequestMapping("test") //resource
    public class TestController {
    	
    	@GetMapping("/{id}")
    	public String testControllerWithPathVariables(@PathVariable(required = false) int id)
    	{
    		return "Hello World! id : " +id;
    	}
    
    }

    => required가 false이므로 굳이 값을 쓰지 않아도 정상적으로 출력됩니다. (물론 id의 값은 안나오겠지만요) 

    => 책은 이렇게 써있는데 왜 제가 쓰면 에러가 날까요? 


    @RequestParam을 사용하면 됩니다. 

    -?id={id}와 같이 매개변수로 넘어오는 값을 변수로 받을 수 있습니다. 

     

    package com.example.demo.controller;
    
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    
    @RestController
    @RequestMapping("test") //resource
    public class TestController {
    	
    	@GetMapping("/testRequestParam")
    	public String testControllerRequestParama(@RequestParam(required = false) int id)
    	{
    		return "Hello World! id : " +id;
    	}
    
    }

     

     


    @RequestBody을 사용하면 됩니다. 

    -반환하고자 하는 리소스가 복잡할 때 사용합니다. EX) JSON

    package com.example.demo.controller;
    
    import com.example.demo.dto.ResponseDTO;
    import com.example.demo.dto.TestRequestBodyDTO;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @RestController
    @RequestMapping("test") //resource
    public class TestController {
    	
    	@GetMapping("/testRequestBody")
    	public String testControllerRequestBody(@RequestBody TestRequestBodyDTO TestRequestBodyDTO)
    	{
    		return "Hello World! id " +TestRequestBodyDTO.getId() + " Message : "+ TestRequestBodyDTO.getMessage();
    	}
    
    }
    package com.example.demo.dto;
    
    import lombok.Data;
    
    @Data
    public class TestRequestBodyDTO {
    	private int id; 
    	private String message;
    	
    }

     

     

     


    @RestController :  @Controller + @ResponseBody 

    package com.example.demo.controller;
    
    import com.example.demo.dto.ResponseDTO;
    import com.example.demo.dto.TestRequestBodyDTO;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @RestController
    @RequestMapping("test") //resource
    public class TestController {
    	
    	@GetMapping("/testResponseBody")
    	public ResponseDTO<String> testControllerResponseBody(@RequestBody TestRequestBodyDTO TestRequestBodyDTO)
    	{
    		List<String> list = new ArrayList<>();
    		list.add("Hello World! I'm a ResponseDTO");
    		ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build();
    		return response;
    	}
    
    }

     


    @ResponseEntity 

    - HTTP 응답의 바디뿐만 아니라 여러 다른 매개변수들, 예를 들어 status나 header를 조작하고 싶을 때 사용합니다. 

    package com.example.demo.controller;
    
    import com.example.demo.dto.ResponseDTO;
    import com.example.demo.dto.TestRequestBodyDTO;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @RestController
    @RequestMapping("test") //resource
    public class TestController {
    	
    	@GetMapping("/testResponseEntity")
    	public ResponseEntity<?> testControllerResponseEntity()
    	{
    		List<String> list = new ArrayList<>();
    		list.add("Hello World! I'm a ResponseEntity & you got 400");
    		ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build();
    		//http status를 400으로 설정
    	return ResponseEntity.badRequest().body(response);
    	}
    
    }

     

    => responseDTO를 리턴한것과 비교했을 때 BODY에는 아무런 차이가 없다. 단지 헤더와 HTTP Status를 조작할 수 있다는 점만이 다르다. 

     

     


    package com.example.demo.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("todo")
    public class TodoController {
    	//testTodo메서드 작성하기 
    }
    반응형

    댓글

Designed by Who.