[Spring] 스프링 부트 핵심 가이드 (Chap05)

Daily-Log·2024년 4월 16일
0
post-thumbnail

참고 : 밑의 코드에서 MemberDto는 postId, title, content, createTime를 가지는 PostDto로 실행하였음



1. GET API

  • CRUD의 R (Read)
  • URL의 경로나 파라미터에 변수를 넣어 요청을 보냄


(1) RequestMapping을 이용

@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
    return "Hello World";
}



(2) GetMapping을 이용

@GetMapping(value = "/hello")
public String hello() {
    return "Hello World";
}




(3) GetMapping을 이용 + URL에 매개변수를 받기

// 1. 같은 변수명
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
    return variable;
}

// 2. 다른 변수명
@GetMapping(value = "/variable2/{variable}")
public String getVariable2(@PathVariable(value = "variable") String value) {
    return value;
}
  • 두 코드는 아래의 동일한 결과를 출력



(4) GetMapping을 이용 + @RequestParam으로 URI뒤에 추가해서 매개변수 받기

@GetMapping(value = "/request1")
public String getRequestParam1(@RequestParam String name, @RequestParam String email) {
    return name+" "+email;
}




(5) GetMapping을 이용 + Map객체로 받기

  • 매개변수의 항목이 일정하지 않을 때도 받을 수 있음
@GetMapping(value = "/request2")
public String getRequestParam2(@RequestParam Map<String, String> param) {
		StringBuilder sb = new StringBuilder();

		param.entrySet().forEach(map -> { 
				sb.append(map.getKey() + " : " + map.getValue() + "\n"); 
		});
		// param.forEach((key, value) -> sb.append(key).append(" : ").append(value).append("\n"));

		return sb.toString();
}




(6) GetMapping을 이용 + DTO 객체

@GetMapping(value = "/request3")
public String getRequestParam3(MemberDto memberDto){
		return memberDto.toString();
}






2. POST API

  • CRUD의 C (Create)
  • 저장하고자 하는 리소스나 값을 HTTP body에 담아 서버에 전달함


(1) RequestMapping을 이용

@RequestMapping(value = "/hello", method = RequestMethod.POST)
public String hello() {
    return "Hello World";
}




(2) PostMapping을 이용 + 매개변수의 항목이 일정하지 않을 때를 대비한 Map객체로 받기

@PostMapping(value = "/request1")
public String postRequestBody1(@RequestBody Map<String, String> body) {
    StringBuilder sb = new StringBuilder();

		body.entrySet().forEach(map -> { 
				sb.append(map.getKey() + " : " + map.getValue() + "\n"); 
		});
		// body.forEach((key, value) -> sb.append(key).append(" : ").append(value).append("\n"));

		return sb.toString();
}




(3) PostMapping을 이용 + DTO 객체

@PostMapping(value = "/request2")
public String postRequestBody2(@RequestBody MemberDto memberDto){
		return memberDto.toString();
}







3. PUT API

  • CRUD의 U (Update) - put/patch


(1) RequestMapping을 이용

@RequestMapping(value = "/hello", method = RequestMethod.PUT)
public String hello() {
    return "Hello World";
}




(2) PutMapping을 이용 + 매개변수의 항목이 일정하지 않을 때를 대비한 Map객체로 받기

@PutMapping(value = "/request1")
public String postMember(@RequestBody Map<String, String> body) {
    StringBuilder sb = new StringBuilder();

		body.entrySet().forEach(map -> { 
				sb.append(map.getKey() + " : " + map.getValue() + "\n"); 
		});
		// body.forEach((key, value) -> sb.append(key).append(" : ").append(value).append("\n"));

		return sb.toString();
}




(3) PutMapping을 이용 + DTO 객체

1. memberDto.toString() => content-type : text/plain 으로 일반 문자열

@PutMapping(value = "/request2")
public String postMemberDto1(@RequestBody MemberDto memberDto){
		return memberDto.toString();
}

2. memberDto => content-type : application/json 형식

@PutMapping(value = "/request3")
public MemberDto postMemberDto2(@RequestBody MemberDto memberDto){
		return memberDto;
}




(4) PutMapping을 이용 + ResponseEntity

@PutMapping(value = "/request4")
public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto) {
		return ResponseEntity
			.status(HttpStatus.ACCEPTED) // 202
			.body(memberDto);
}







4. DELETE API

  • CRUD의 D (Delete) - delete


(1) RequestMapping을 이용

@RequestMapping(value = "/hello", method = RequestMethod.DELETE)
public String hello() {
    return "Hello World";
}




(2) DeleteMapping을 이용 + @PathVariable을 활용

@DeleteMapping(value = "/{variable}")
public String DeleteVariable(@PathVariable String variable){
		return variable;
}




(3) DeleteMapping을 이용 + @RequestParam으로 URI뒤에 추가해서 매개변수 받기

@DeleteMapping(value = "/request1")
public String getRequestParam1(@RequestParam String variable){
		return variable;
}







5. API 문서 작성 - Swagger 이용

  • Swagger 경로 : localhost:8080/swagger-ui.html


🗨️ build.gradle

implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'



🗨️ SwaggerConfig.java : 기본 틀

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI springShopOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("익명 게시판 API Document")
                        .description("익명 게시판 API 명세서입니다.")
                        .version("1.0.0"));
    }
}


=> 책에선 springfox로 다루고 있어서 여러 변형 방법에 대해서는 공식문서로 공부해야겠음





6. 로깅 라이브러리 - Logback

profile
대충 뭐든 먹어요

0개의 댓글

관련 채용 정보