@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; // 조회수
}
@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
@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
@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
폴더 생성 방법
model -> service
'Spring Boot' 카테고리의 다른 글
[SpringBoot] CRUD (1) | 2023.10.10 |
---|---|
[SpringBoot] 로그백, 로깅 라이브러리 logback , log4jdbc 설정 (0) | 2023.10.06 |
[SpringBoot] 데이터를 저장하고 멤버 객체 생성하여 결과 json 데이터로 전송 (0) | 2023.10.06 |
[SpringBoot] Jsp library 사용법 (0) | 2023.10.06 |
[SpringBoot] 매개변수(파라메터) 전달받아 출력하기 (0) | 2023.10.05 |