67. spring(10)

sumin·2023년 10월 16일
0

아카데미

목록 보기
68/82
post-thumbnail

Rest

Rest (Representational State Transfer)
자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다.
1. HTTP URI을 통하여 자원을 명시하고
2. HTTP Method(POST,GET,PUT,DELETE,PATCH 등)를 통해
3. 해당 자원(URI)에 대한 자원 CRUD Operation을 적용하는 것을 의미한다.

rest api
  1. 요청 주소를 작성하는 새로운 방식이다. 
  2. 변수를 파라미터로 추가하는 Query String 방식이 아니다. 
  3. 변수를 주소에 포함시키는 Path Variable 방식을 사용한다. 
  4. 요청의 구분을 "요청 주소 + 요청 방식(Method)"을 합쳐서 요청을 구분한다. 
  5. 예시
                    URL          Method
   1) 목록       /members         GET     
   2) 상세보기    /members/1       GET
   3) 삽입       /members         POST
   4) 수정       /members         PUT
   5) 삭제       /members/1       DELETE


한 페이지에서 목록, 등록, 삭제와 수정을 동시에 할 수 있다.

controller

@RequiredArgsConstructor
@RestController  //  모든 메소드에 @Responsebody를 추가한다.
public class MemberController {
    
    private final MemberService memberService;
    
    //회원등록 요청
    
    @RequestMapping(value="/members", method = RequestMethod.POST, produces="application/json" )
    public Map<String, Object> registerMember(@RequestBody MemberDto memberDto, HttpServletResponse response){
      
           
      return memberService.register(memberDto, response); 
    }
  
    //회원 목록 요청
    // 경로에 포함되어 있는 변수{page}는 @PathVariable을 이용해서 가져올 수 있다. 
    @RequestMapping(value="/members/page/{p}", method = RequestMethod.GET, produces = "application/json")
    public Map<String, Object> getmembers(@PathVariable(value="p",required=false) Optional<String> opt) { // 그냥 int 가 온다면  Value, required 안해도 됨 
      int page = Integer.parseInt(opt.orElse("1"));
      System.out.println(memberService.getMembers(page));
      return memberService.getMembers(page);
      
    }
    //회원 조회 요청
    @RequestMapping(value="/members/{mNo}", method = RequestMethod.GET, produces = "application/json")
    public Map<String, Object> getMember(@PathVariable(value="mNo") int memberNo ) {
      return memberService.getMember(memberNo);
    }
    //회원 정보 수정
    @RequestMapping(value="/members", method = RequestMethod.PUT, produces = "application/json")
    public Map<String, Object> modifyMember(@RequestBody MemberDto memberDto) {
      return memberService.modifyMember(memberDto);       
    }
    
    //회원 정보 삭제
    @RequestMapping(value="/member/{memberNo}", method=RequestMethod.DELETE, produces = "application/json" )
    public Map<String, Object> deleteMember(@PathVariable(value="memberNo") int memberNo) {
      return memberService.deleteMember(memberNo);
    }
    
    //회원 정보 모두 삭제
    @RequestMapping(value="/members/{memberNoList}", method=RequestMethod.DELETE, produces = "application/json" )
    public Map<String, Object> deleteMembers(@PathVariable(value="memberNoList") String memberNoList) {
      return memberService.deleteMembers(memberNoList);
    }

@ResponseBody
클라이언트에서 전송한 xml데이터나 json 등등 데이터를 컨트롤러에서 DOM 객체나 자바 개체로 변환하고 다시 자바객체를 HTTP응답 바디로 변환해 준다.
자바 객체를 HTTP 요청의 바디내용으로 매핑하여 클라이언트로 전송한다. @ResponseBody 가 붙은 파라미터가 있으면 HTTP 요청의 미지어타입과 파라미터의 타입을 먼저 확인하다.
메세지 변환기 중에서 해당 미디어 타입과 파라미터 타입을 처리한할 수 있다면 HTTP요청의 본문 부분을 통째로 변환해서 지정된 메소드 파라미터로 전달해준다.

@RestController
자동으로 @ResponseBody가 붙게 만든어 주는 것으로 별도의 어노테이션을 명시해 주지 않아도 HTTP 응답 데이터에 자바 객체가 배핑되어 전달된다.

@PathVariable
일반적인 Get 방식으로 파라미터 전달이 있으면 http:localhost:8080/user?userId=xxx 처럼 전달이 된다. 하지만 Rest Api호출시에는 주소에 userId 값이 나오지 않게 처리할 수 있다.
URI를 이용해서 처리할 수 있는 것이다.
@RequestParam 과 같은 기능을 한다.

@RequestMapping
특정 uri로 요청을 보냐면 Controller에서 어떠한 방식으로 처리할 지 정의를 한다. 이대 들어온 요청을 특정 메서드와 매핑하기 위해 사용하는 것이다. value와 method를 많이 사용하며 method는 어떤 요청을 받을지 정의하게 된다. method = RequestMethod.DELETE 와 같이 사용하는데 이를 @DeleteMapping 처럼 사용할 수 있다.

view

ajax으로 보낸다.

profile
백엔드 준비생의 막 블로그

0개의 댓글