본문 바로가기

Spring

클라이언트-서버간 파라미터 주고받기

@PathVariable

 

@RestController
@RequestMapping("test")
public class TestController {
 
    @GetMapping("/{id}")
    public String testController1(@PathVariable(required = falseint id) {
        return "Hello REST API " + id;
    }
 
cs

 

쿼리스트링을 넣을 필요없이 단순히 값 하나를 전달하기에 가장 적합함.

 

 

@RequestParam

 

@GetMapping("/")
    public String testController2(@RequestParam int id, String title) {
        return "Hello REST API " + id + ": " + title;
    }
 
cs

 

쿼리스트링으로 파라미터를 전달함.

복수의 값을 전달할수 있음.

 

 

@RequestBody

 

 @GetMapping("/sendJSON")
    public String testController3(@RequestBody TestRequestBodyDto testRequestBodyDto) {
        return testRequestBodyDto.getId() + ". Hello REST API " +
                " Message: " + testRequestBodyDto.getMessage();
    }
 
cs
public class TestRequestBodyDto {
    private int id;
    private String message;
}

 

전달값이 String이나 int같은 기본 자료형이 아닌 객체를 통째로 보낼 때 사용함.

 

 

브라우저 주소창에 객체를 입력할수 있는 방법이 없기 때문에 Postman같은 외부 프로그램의 도움을 받음.

 

 

Body에 JSON형식으로 입력(상단), 결과값 출력(하단)

 

@RequestBody로 객체를 서버쪽으로 보냈으면, 서버에서 객체를 반환할때는?

 

 

@ResponseBody

 

@GetMapping("/sendObject")
    public ResponseDto<String> testController4() {
        List<String> list = new ArrayList<>();
        list.add("send ResponseDTO");
        ResponseDto<String> response = ResponseDto.<String>builder().data(list).build();
        return response;
    }
 
cs
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ResponseDto<T> {

    private String error;
    private List<T> data;
}

 

 

@ResponseBody 어노테이션은 보이질 않지만 사실

 

@RestController
@RequestMapping("test")
public class TestController

 

클래스를 선언할때 사용한 @RestController 어노테이션에 @ResponseBody가 포함되어 있음.

 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController