spring boot get

원종서·2021년 7월 23일
0
@RestController  //rest Api를 처리하는 controller 라는 것을 선언
@RequestMapping("/api") // 주소를 할당하기 위해 선언
public class ApiController {
 	
    @GetMapping("/hello") // localhost:8080/api/hello 로 get 메서드를 request
    public String hello(){
    	return "hello world";
    }

서버에 GET Method 요청

@RestController
@RequestMapping("api/get")
public class GetApiController{
	
    @GetMapping(path="hello") // default value = path
    public String getHello(){ return "hello";}
    

클라이언트로부터 path value를 받아보자

@GetMapping(path="/path-variable/{name}")
public String pathValue(@PathVariable(name="name") String pathName){

	System.out.println("path Variable : " + pathName );
    return pathName);
}

public String pathValue(@PathVariable(name="name") String pathName){
에서 (name ="name") 을 지정 하지 않고 String name으로 해도 된다, 하지만 주의할점은 prop의 이름과 변수의 이름이 같아야 한다.

클라이언트로부터 Query params를 받아보자

search?name=jongse&age=25&OOO 등..

(?key=value&key2=value2 ) 규칙을 갖는다.

http://localhost:8080/api/get/query-param?use=jong&email=visionwill@naver.com&age=25 URL 에서 query 받기

방법 1.

 public String queryParam(@RequestParam Map<String , String> queryParam) {

                  StringBuilder sb = new StringBuilder();
                queryParam.entrySet().forEach( entry -> {
                    System.out.println(entry.getKey());
                    System.out.println(entry.getValue());
                    System.out.println("\n");

                    sb.append(entry.getKey() + " = "+ entry.getValue());
                });
                return sb.toString();
        }    

방법 2. 파라미터의 값을 이미 알고 있는 경우

@GetMapping("query-param)
public String queryParam(
	@RequestParam String name,
   	@RequestParam String email,    	
    @RequestParam int age
  	){
     System.out.println(name);
            System.out.println(email);
            System.out.println(age);

            return name + " " + email + " " + age;

}

파라미터와 변수를 같이 설정해줘야한다. 하지만 문제점은 받는 param 의 수가 많아지면 일일이 하기가 어려움

여기서 사용하는 것이 DTO

DTO

public class UserRequest{
    private String name;
    private String email;
    private int age;
    
    // ... getter and setter
    //@overloading toString..
}

DTO 주의점은 , DTO에 선언한 변수와 param 의 표기 방법이 다를 수 있다. 이럴 경우
@JsonProperty(name)

@GetMapping(path="query-param")
public String queryParam(UserRequest userRequest){
 System.out.println(userRequest.getName());   	
 System.out.println(userRequest.getEmail());       
 System.out.println(userRequest.getAge());
 
 return userRequest.toString();
}

DTO로 param 을 받아오는 경우 주의할점은 따로 @requsetParam을 명시하지 않고, 객체를 받는다.

0개의 댓글