swagger 로 웹에서 만든 패키지를 보여줄 수 있다
swagger 을 사용할려면 maven을 추가 해주어야 한다.
<!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.3.0</version>
</dependency>
pom.xml에 추가해준다.
●SwaggerConfig
package com.mh.restapi03.conf;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
// 제목이랑 소제목을 정할 수 있다.
@OpenAPIDefinition(
info = @Info(title = "MH 가 만든 USER,MAIN",
description = "유저 등록 수정 삭제 조회 등이 가능합니다.",
version = "v1.0.0"
)
)
@Configuration
public class SwaggerConfig {
// 지정된것만 swagger에 보여줘라
@Bean
public GroupedOpenApi groupedOpenApi(){
String paths[] = {"/users/**"};
// user/** user만 보여줘라
return GroupedOpenApi.builder()
.group("userController 만 보여지게 된다.")
.pathsToMatch(paths)
.build();
}
}
class 를 만들어줘서 제목이랑 소제목을 정해준다.
●User
package com.mh.restapi03.users;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.*;
import lombok.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Entity
@ToString
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "users") // table 이름을 바꾸는 어노테이션
@Schema(description = "User Table 에 대한 내용입니다.")
public class User {
// SEQUENCE 테이블을 생성해서 기본키
//IDENTITY AUTO_INCREMENT 자동증가키
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 기본키
@Schema(title = "사용자 ID",defaultValue = "table에서 자동으로 생성되는 컬럼입니다.")
private Long id;
@Column(length = 50)
@Schema(title = "사용자 username",description = "사용자 이름을 넣어주면 됩니다.")
private String username;
@Column(length = 50, unique = true ) // 중복나게 되면 insert 실패
@Schema(title = "사용자 email",description = "사용자 이메일을 넣어주면 됩니다.") // 이름을 지정할 수 있다.
private String email;
private String password;
// male ,female 값을 넣을 수 있다.
@Enumerated(EnumType.STRING)
// @Enumerated(EnumType.ORDINAL) -> male = 1 번 , female 은 2번 순서 가 들어가게 된다.
private Gender gender;
@JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss")
private LocalDateTime wdate;
}
@Schema로 이름을 정해준다.
title이 제목, description이 글 이 된다.
User class 와 UserDto class 에 대해 이름을 정해줄 수 있다.
●UserController
package com.mh.restapi03.users;
import com.mh.restapi03.exception.ErrorCode;
import com.mh.restapi03.exception.UserException;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.modelmapper.ModelMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@RestController
@RequiredArgsConstructor
@Validated
@Tag(name = "User-controller",description = "유저 조회 등록 수정 삭제") // 상단 제목을 설정 할 수 있다 .
public class UserController {
private final UserService userService;
@Operation(summary = "사용자 전체 목록 보기",description = "사용자 전체 정보를 조회 할 수 있다.") // get에 대한 제목을 설정
@ApiResponses(
{
@ApiResponse(responseCode = "200",description = "ok"),
@ApiResponse(responseCode = "404",description = "사용자들이 없을 때 나옵니다.")
}
)
@GetMapping("users")
public ResponseEntity<List<User>> getAllUsers(User user){
List<User> list = userService.getAllUsers(user);
if (list.size() ==0 ){
throw new UserException(ErrorCode.NOTFOUND);
}
return ResponseEntity.ok(list);
//return ResponseEntity.status(HttpStatus.OK).body(list); 상태값을 넘겨줄려고 할 때 이렇게 쓴다.
}
@GetMapping("users/{id}")
public ResponseEntity<User> getUsers(
@Parameter(description = "조회하고자 하는 사용자 ID",
name = "사용자 ID",
required = true
)
@PathVariable Long id) {
System.out.println(id);
User user = userService.getUserById(id);
return ResponseEntity.status(HttpStatus.OK).body(user);
}
@PostMapping("users")
public ResponseEntity<User> addUser(@RequestBody @Valid UserDto userDto){
userDto.setWdate(LocalDateTime.now());
ModelMapper modelMapper = new ModelMapper();
User user = modelMapper.map(userDto,User.class);
// User user = modelMapper.map(userDto,User.class);
// BeanUtils.copyProperties(userDto,user);
// 클래스를 복사 하는 법 BeanUtils.copyPropertoes 와 modelMapper 가 있다.
User dbuser = userService.regist(user);
return ResponseEntity.status(HttpStatus.CREATED).body(dbuser);
}
@PutMapping("users")
public ResponseEntity<User> UpdateUser(@RequestBody @Valid UserDto userDto){
ModelMapper modelMapper = new ModelMapper();
User user = modelMapper.map(userDto, User.class);
user.setWdate(LocalDateTime.now());
User dbuser = userService.UpdateUser(user);
return ResponseEntity.status(HttpStatus.ACCEPTED).body(dbuser);
}
}
구문을 보면 @Tag 로 상단의 제목을 정할 수 있다.(name과 description)
http://localhost:8080/swagger-ui/index.html 로 들어가면 확인 할 수 있다.
'spring boot' 카테고리의 다른 글
Spring boot @handleMethodArgumentNotValid / delete/@Transactional (0) | 2024.03.12 |
---|---|
Spring boot 오류에 대한 설정/ UPDATE /{ID} (0) | 2024.03.11 |
Spring boot 다른 포트 설정 (0) | 2024.03.11 |
Spring boot 유효성 검사 / 복사 (0) | 2024.03.07 |
Spring boot JPA(2), 포트 설정 (0) | 2024.03.06 |