[Spring] Spring Method-JPA

Https 메서드

HTTP – POST Method

  • 주소 창에 파라미터가 노출 되지 않는다.
  • Example www.localhost:8080/search www.google.com/search
  • 주소 창에 사용자의 요청 사항이 노출 되지 않는다. Get 방식에서는 주소 길이 제한이 있지만 POST는 그보다 길게 사용가능 (제한존재) 브라우저가 주소 캐시를 하지 못 하는 특성이 있다.

사용자로부터 주소를 받아둬야 하는데 주소들의 묶음을 받아두는 걸 컨트롤러라고 한다.

package com.example.study.controller;


import com.example.study.model.SearchParam;
import org.springframework.web.bind.annotation.*;

@RestController //컨트롤러라고 활용할거라는 지시어
@RequestMapping("/api") //api 주소 매핑하기 위해 리퀘스트 매핑 사용
//localhost:8080/api
public class GetController {

    @RequestMapping(method= RequestMethod.GET, path = "/getMethod") //localhost:8080/api/getMethod
    public String getRequest(){ //()안에 파라미터 넣는다.
        return "Hi getMethod";
    }
    @GetMapping("/getParameter")    //주소지정 localhost:8080/api/getParameter라는 곳에 매핑이 된다.
    //localhost:8080/api/getParameter?id=1234&pasword=abcd
    //아이디와 패스워드 넘기기 위해 스프링에서는 RequestParam이란 걸 넘기게 된다.

    //localhost:8080/api/getMultiParameter?account=abcd&email=study@gmail.com&page=10
    public String getParameter(@RequestParam String id, @RequestParam(name ="password") String pwd){

        String password ="bbbb";
        System.out.println("id:" + id);
        System.out.println("pw:" + password);

        return id+password;
    }

    @GetMapping("getMultiParameter")
    public SearchParam getMultiParameter(SearchParam searchParam){
        System.out.println(searchParam.getAccount());
        System.out.println(searchParam.getEmail());
        System.out.println(searchParam.getPage());


        //보통 json 형태로 데이터 통신.(스프링에서 json 객체를 내부적으로 내장하고 있다.)
        //{"account":"","email":"","page":0}
        return searchParam;
    }
}

집중해야 할건 get 메서드를 매칭시켜주고 리퀘스트에 대한 파라미터를 받아오고, 데이터를 처리하고 제이슨 형태로 내리는 것이 핵심.


POST

HTTP – POST Method

  • 주소 창에 파라미터가 노출 되지 않는다.
  • Example www.localhost:8080/search www.google.com/search
  • 주소 창에 사용자의 요청 사항이 노출 되지 않는다. Get 방식에서는 주소 길이 제한이 있지만 POST는 그보다 길게 사용가능 (제한존재) 브라우저가 주소 캐시를 하지 못 하는 특성이 있다.

주소가 만약 똑같은게 존재하면 스프링 부트는 실행하지 못한다.

20210326_010601

그 부분은 메서드가 주소가 동일한 부분이 존재하면 실행 에러가 뜬다. (어떤 걸 실행할 지 모르기 때문)

근데 클래스에 대해서는 두가지가 겹쳐도 문제가 없다. 그래서 post api에도 api라 매핑 시킴.

20210326_012749

그리고 확장프로그램에서 Restlet( 현재는 이름이 바뀐거 같다) Talend 를 받아준다.

package com.example.study.controller;


import com.example.study.model.SearchParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController //컨트롤러라고 활용할거라는 지시어
@RequestMapping("/api") //api 주소 매핑하기 위해 리퀘스트 매핑 사용
public class PostController {
    //HTML <FORM>,
    //ajax 검색
    //http post body ->data 집어 넣어서 보내겠다.
    // json, xml , multipart-form / text-plain 같이 여러 형태로 올릴 수 있다.


    @PostMapping(value = "/postMethod")
    public String postMethod(@RequestBody SearchParam searchParam){
        //RequestBody에 SearchParam searchParam 이런 값들을 매칭시켜 주세요라는 뜻.
        return "OK";
    }
}

그리고 여기서

20210326_013615

http://localhost:8080/api/getMethod

를 저기 http로 넣고 (s 뺴야 됨) 실행하면 잘 작동 된다. s뺴는 이유는 아직은 잘 모르겠다.


post 방식은 post로 바꾸고 이와 같이 작성한다.

20210326_035048

post 방식으로 제이슨 보내니까 제이슨 형태로 작성해준다.

package com.example.study.controller;


import com.example.study.model.SearchParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController //컨트롤러라고 활용할거라는 지시어
@RequestMapping("/api") //api 주소 매핑하기 위해 리퀘스트 매핑 사용
public class PostController {
    //HTML <FORM>,
    //ajax 검색
    //http post body ->data 집어 넣어서 보내겠다.
    // json, xml , multipart-form / text-plain 같이 여러 형태로 올릴 수 있다.


    @PostMapping(value = "/postMethod")
    public SearchParam postMethod(@RequestBody SearchParam searchParam){
        //RequestBody에 SearchParam searchParam 이런 값들을 매칭시켜 주세요라는 뜻.
        return searchParam;
        //이렇게 바꾸면 requestbody에 들어온 내용이 리턴
    }
}

그리고 PostController를 위와같이 수정하고 실행해보자.

20210326_035532

실행하면 정상적으로 요청한 내용이 리턴 되는 걸 볼 수 있다.

해석해보면 (코드와 비교해서)

post메서드는 post매핑 주소는 api의 포스트 메서드 데이터 보낼건데 컨텐츠 타입은 json, RequestBody에는 제이슨이 가는데 내용이 들어간다.

요청이 들어왔을때 헤더값 보고 어플리케이션 json 확인하고

RequestBody 인 SearchParam에 가서

20210326_035825

각 들어온 내용을 제이슨 형태로 매핑하고 리턴한다.

그 결과가 아까 200 으로 성공한 내용으로 보여줬다.


HTTP – PUT/PATCH Method

  • POST와 마찮가지로 BODY에 데이터가 들어 있으며, 주로 업데이트에 사용한다.

HTTP – DELETE Method

  • Get과 마찮가지로 주소에 파라미터가 들어가며, 데이터를 삭제 할 때 사용한다.

REST 의 개념

  • HTTP 프로토콜에 있는 Method를 활용한 아키텍처 스타일 이다.
  • HTTP Method 를 통해서 Resource를 처리 한다.
  • CRUD 를 통한 Resource 조작을 할 때 사용 한다.

20210326_040839







© 2021.03. by yacho

Powered by github