@PutMapping("url") 연습
- 예제1) 데이터를 입력받아(insert) 화면에 출력하기
- 연습1) Qna 클래스를 만들어서 데이터를 추가해서 REST Client 프로그램으로 출력
- 연습2) Board 클래스에 출력되도록 레스트클라이언트에 프로그램으로 출력
더보기
package com.example.controllerexam.controller.exam07;

import com.example.controllerexam.model.Board;
import com.example.controllerexam.model.Member;
import com.example.controllerexam.model.Qna;
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;

import java.util.ArrayList;
import java.util.List;

/**
 * packageName : com.example.controllerexam.controller.exam07
 * fileName : ObjectRequestBodyController
 * author : L.DH
 * date : 2023-10-06
 * description : @RequestBody, @RestController, @Postmapping
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————
 * 2023-10-06         L.DH         최초 생성
 */
@RestController
@RequestMapping("/exam07")
public class ObjectRequestBodyController {
    //  TODO : 예제1) 데이터를 입력받아(insert) 화면에 출력하기
//   CRUD : C(Create), R(Read)
//   R(select) : @GetMapping("url")
//   C(insert) : @PostMapping("url")함수명(@RequestBody 객체명){}
//   참고(U(update)) : @PutMapping("url")
//   참고(D(delete)) : @DeleteMapping("url")
//  TODO: C(insert) 사용법 : @PostMapping("/object-variable")
//    @RequestBody 객체명 : (vs @ModelAttribute 객체명 : jsp 사용)
    @PostMapping("/object-variable")
    public List<Member> getObjectRequestBody(
            @RequestBody Member member
    ) {
        List<Member> list = new ArrayList<>();
        list.add(member);

        return list;
    }

//  TODO: 연습1) Qna 클래스를 만들어서 아래 데이터를 추가해서 REST Client 프로그램으로 출력해 보세요. (@PostMapping 사용)
//    입력 :
//           {
//               "no": 1,
//               "title": "제목"
//               "content": "내용"
//           },
//    결과 :
//       [
//           {
//               "no": 1,
//               "title": "제목"
//               "content": "내용"
//           },
//       ]
    @PostMapping("/object-qna")
    public List<Qna> getObjectRequestBody(
            @RequestBody Qna qna
    ) {
        List<Qna> list = new ArrayList<>();
        list.add(qna);

        return list;
    }

//    TODO: 연습2) Board 클래스에 아래와 같이 출력되도록 레스트클라이언트에 출력해 보세요. (@PostMapping 사용)
//      결과 :
//       [
//           {
//          "no": 10,
//          "title": "제목",
//          "content": "내용",
//          "count" : "1"
//           }
//       ]
    @PostMapping("/object-board")
    public List<Board> getObjectRequestBody(
            @RequestBody Board board
    ) {
        List<Board> list = new ArrayList<>();
        list.add(board);

        return (list);
    }

}
더보기
package com.example.controllerexam.model;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * packageName : com.example.controllerexam.model
 * fileName : Member
 * author : L.DH
 * date : 2023-10-05
 * description : 회원 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————
 * 2023-10-05         L.DH         최초 생성
 */
// TODO : Lombok 라이브러리 : 유용한 @ 모은 라이브러리
//  @Setter : setter 함수를 만들어주는 어노테이션
//  @Getter : getter 함수를 만들어주는 어노테이션
//  @ToString : toString 재정의 함수 자동으로 만들어주는 어노테이션
//  @AllArgsConstructor : 모든 속성을 가진 생성자 자동 정의
@Setter
@Getter
@ToString
@AllArgsConstructor
public class Member {
    //  TODO : 속성, 생성자, 함수(getter/setter)
    String id;      // 회원 id
    String name;    // 회원명
}
더보기
package com.example.controllerexam.model;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * packageName : com.example.controllerexam.model
 * fileName : Qna
 * author : L.DH
 * date : 2023-10-06
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————
 * 2023-10-06         L.DH         최초 생성
 */
@Setter
@Getter
@ToString
@AllArgsConstructor
public class Qna {
//  TODO : 속성, 생성자, 함수(getter/setter)
    Integer no;         // 번호
    String title;   // 제목
    String content; // 내용
}
더보기
package com.example.controllerexam.model;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * packageName : com.example.controllerexam.model
 * fileName : Board
 * author : L.DH
 * date : 2023-10-06
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————
 * 2023-10-06         L.DH         최초 생성
 */
@Setter
@Getter
@ToString
@AllArgsConstructor
public class Board {
    long no;            // 넘버
    String title;      // 제목
    String content;    // 내용
    String count;      // 조회수
}

HTTP 클라이언트에서 열기 -> generated-requests.http -> Content-Type: application/json 실행

 


 

@PostMapping, @RequestBody, ResponseEntity 클래스 사용
프로그램 품질 향상을 위해 사용하는  ResponseEntity 객체 : 상수(신호)
성공(신호) : HttpStatus.OK (200)                  : 200 ~ 400 사이 (거의 성공 메세지를 의미)
실패(신호) : HttpStatus.NOT_FOUND (404) : 400 이상 (거의 실패 메세지를 의미)
더보기
package com.example.controllerexam.controller.exam08;

import com.example.controllerexam.model.Member;

import com.example.controllerexam.model.Qna;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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;

import java.util.ArrayList;
import java.util.List;

/**
 * packageName : com.example.controllerexam.controller.exam08
 * fileName : ObjectResponseEntityController
 * author : L.DH
 * date : 2023-10-06
 * description :
 *
 * @PostMapping, @RequestBody, ResponseEntity 클래스 사용
 * 목적 : 프로그램 품질 향상을 위해 사용
 * <p>
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————
 * 2023-10-06         L.DH         최초 생성
 */
@RestController
@RequestMapping("/exam08")
public class ObjectResponseEntityController {

    //  TODO : ResponseEntity 객체 : 상수(신호) :
//   성공(신호) : HttpStatus.OK (200)        : 200 ~ 400 사이 (거의 성공 메세지를 의미)
//   실패(신호) : HttpStatus.NOT_FOUND (404) : 400 이상 (거의 실패 메세지를 의미)
//   사용법 : new ResponseEntity<>(배열[객체], 신호(성공 or 실패)
//   사용법 : new ResponseEntity<>(신호(성공 or 실패)
    @PostMapping("/object-body")
    public ResponseEntity<Object> getObjectRequestBody(
            @RequestBody Member member
    ) {
        List<Member> list = new ArrayList<>();
        list.add(member);
        return new ResponseEntity<>(list, HttpStatus.OK);
    }
//  TODO: 멤버를 아래 결과와 같이 List 에 추가해서 출력해보세요.
//    단 상태 메세지는 OK 메세지를 출력하세요
//    결과 :
//       [
//           {
//               "id": "jang",
//                   "name": "장길산"
//           }
//       ]
    @PostMapping("/member-object-body")
    public ResponseEntity<Object> getExample01(
            @RequestBody Member member
    ) {
        List<Member> list = new ArrayList<>();
        list.add(member);

        return new ResponseEntity<>(list, HttpStatus.OK);
    }

//  TODO: 연습 문제 2)
//    아래 결과를 보고 QNA 클래스를 정의하고 List 에 추가해서 출력해보세요.
//    단 상태 메세지는 FOUND 메세지를 출력하세요
//    결과 :
//       [
//           {
//               "no": 1,
//               "title": "Qna 제목",
//               "content": "Qna 내용"
//           }
//       ]
    @PostMapping
    ResponseEntity<Object> getExample02(
            @RequestBody Qna qna
    ) {
        List<Qna> list = new ArrayList<>();
        list.add(qna);

        return new ResponseEntity<>(list, HttpStatus.FOUND);
    }


}
더보기
###
POST http://localhost:8000/exam08/member-object-body
Content-Type: application/json

{
  "name": "jang",
  "id": "장길산"
}

<> 2023-10-06T151836.200.json
<> 2023-10-06T151812.400.json

###
POST http://localhost:8000/exam08
Content-Type: application/json

{
  "no": "1",
  "title": "Qna 제목",
  "content": "Qna 내용"
}

<> 2023-10-06T152023.302.json
<> 2023-10-06T151948.400.json

Response code : HttpStatus.OK (200) /  HttpStatus.FOUND(302)

 


 

@PostMapping, @RequestBody, ResponseEntity 클래스 사용
ResponseEntity<자료형>
(성공 or 실패와 예외 에러 발생 신호 보내기)
생성자 형태로 내보내기

- 예제1) 멤버 클래스(Member) 의 정보를 Post 방식으로 제공받고 List 넣어 Rest Client 로 출력 단, 예외 처리 코딩을 하되 List 가 null 이 아닐 경우 상태메세지를 OK(200), 실패 메세지는 0건 insert : NO_CONTENT(204) 로 하고, 프로그램 예외 에러 발생 시 BAD_REQUEST(400) 코딩하세요.

- 연습1) 부서 클래스(Dept) 의 정보를 Post 방식으로 제공받고 List 넣어 Rest Client 로 출력 단, 예외 처리 코딩을 하되 List 가 null 이 아닐 경우 상태메세지를 FOUND(302), 실패 메세지는 NO_CONTENT(204) 로 하고, 프로그램 예외 에러 발생 시 INTERNAL_SERVER_ERROR(500) 코딩하세요.
더보기
package com.example.controllerexam.controller.exam09;


import com.example.controllerexam.model.Dept;
import com.example.controllerexam.model.Member;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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;

import java.util.ArrayList;
import java.util.List;

/**
 * packageName : com.example.controllerexam.controller.exam09
 * fileName : ObjectResponseEntity2Controller
 * author : L.DH
 * date : 2023-10-06
 * description : ResponseEntity<자료형> 생성자 형태로 내보내기
 * 요약 :
 * ResponseEntity(성공 or 실패 신호 보내기)
 * 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————
 * 2023-10-06         L.DH         최초 생성
 */
@RestController
@RequestMapping("/examp09")
public class ObjectResponseEntity2Controller {
    @PostMapping("/objet-body")
    public ResponseEntity<Object>
    getObjectRequestBody(
            @RequestBody Member member
    ) {
        try {
            List<Member> list = new ArrayList<>();
            list.add(member);
//          TODO : 성공 : OK(200)
            if (member != null) {
                return new ResponseEntity<>(list, HttpStatus.OK);
            } else {
//          TODO : 0건 insert : NO_CONTENT(204)
                return new ResponseEntity<>(HttpStatus.NO_CONTENT);
            }
        } catch (Exception e) {
//          TODO : BAD_REQUEST(400)
            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
        }
    }

//  TODO: 연습 1) 부서 클래스(Dept) 의 정보를 Post 방식으로 제공받고 List 넣어
//      Rest Client 로 출력하세요
//    단, 예외 처리 코딩을 하되 List 가 null 이 아닐 경우 상태메세지를 FOUND(302),
//    실패 메세지는 NO_CONTENT(204) 로 하고,
//    프로그램 에러가(예외) 발생 시 INTERNAL_SERVER_ERROR(500) 코딩하세요.

@PostMapping("/object-body-dept")
    public ResponseEntity<Object>
    getExam01(
        @RequestBody Dept dept
        ) {
        try {
            List<Dept> list = new ArrayList<>();
            list.add(dept);
//          TODO : 성공 : FOUND(302)
            if (dept != null) {
                return new ResponseEntity<>(HttpStatus.FOUND);
            } else {
//          TODO : 0건 insert : NO_CONTENT(204)
                return new ResponseEntity<>(HttpStatus.NO_CONTENT);
            }

        } catch (Exception e) {
//          TODO : INTERNAL_SERVER_ERROR(500)
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
}
}
더보기
###
POST http://localhost:8000/examp09/objet-body
Content-Type: application/json

{
  "id": "jang",
  "name": "장길산"
}

<> 2023-10-06T153747.200.json
<> 2023-10-06T153719.400.json

###
POST http://localhost:8000/examp09/object-body-dept
Content-Type: application/json

{
  "dno": 10,
  "dname": "Sales",
  "loc": "Busan"
}

<> 2023-10-06T153755.400.json

Response code : HttpStatus.OK (200) /  HttpStatus.FOUND(302)

 


 

@PostMapping, @RequestBody, ResponseEntity 클래스 사용
ResponseEntity<자료형>
(성공 or 실패와 예외 에러 발생 신호 보내기)
함수 형태로 내보내기
더보기
package com.example.controllerexam.controller.exam10;

import com.example.controllerexam.model.Member;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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;

import java.util.ArrayList;
import java.util.List;

/**
 * packageName : com.example.controllerexam.controller.exam10
 * fileName : ObjectResponseEntity3Controller
 * author : L.DH
 * date : 2023-10-06
 * description : ResponseEntity<자료형> 함수 형태로 내보내기
 * 요약 :
 * ResponseEntity(성공 or 실패 신호 보내기)
 * 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————
 * 2023-10-06         L.DH         최초 생성
 */
@RestController
@RequestMapping("/examp10")
public class ObjectResponseEntity3Controller {
    @PostMapping("/objet-body")
    public ResponseEntity<Object>
    getObjectRequestBody(
            @RequestBody Member member
    ) {
        try {
            List<Member> list = new ArrayList<>();
            list.add(member);
//          TODO : 성공 : OK(200)
            if (member != null) {
                return ResponseEntity.ok().body(list);
            } else {
//          TODO : 0건 insert : NO_CONTENT(204)
//           디자인패턴 : 빌더 패턴(생성자 대신 사용하는 기능)
                return ResponseEntity.noContent().build();
            }
        } catch (Exception e) {
//          TODO : BAD_REQUEST(400)
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
        }
    }
}
더보기
###
POST http://localhost:8000/examp10/objet-body
Content-Type: application/json

{
  "id": "jang",
  "name": "장길산"
}

<> 2023-10-06T161835.200.json

Response code :&nbsp;ResponseEntity.ok().body(list);


폴더 생성 방법
model -> service