본문 바로가기
spring boot

Spring boot 웹에서 만든 패키지 보기

by improve 2024. 3. 11.

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 로 들어가면 확인 할 수 있다.