YagSill

Spring boot + Swagger API 만들기(회원가입 기능) 본문

JAVA Spring

Spring boot + Swagger API 만들기(회원가입 기능)

YagSill 2023. 1. 16. 16:12
728x90

안녕하세요 yagsil 입니다.

 

오늘은 spring boot과 swagger를 연동해서 api 를 만들어 보겠습니다.

아주아주 간단합니다!

 

컨트롤러 부분입니다.

// Controller

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Operation(summary = "앱 회원가입", description = "회원가입 시 호출", tags = { "user" })
    @ApiResponses(value = {
            @ApiResponse(description = "OK", responseCode = "200", content = {
                    @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = SignUpDto.Result.class)) }),
    })

    @PostMapping(value = "signUp", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public ResponseEntity<?> signUp(@Parameter SignUpDto.In in) {
        return new ResponseEntity<>(userService.signUp(in), HttpStatus.OK);
    }
}

 

Dto 부분입니다.

// DTO

public class SignUpDto {

    @Data
    public static class In {
        @Schema(example = "altm56", description = "아이디")
        private String userId;
        @Schema(example = "1111", description = "비밀번호")
        private String passwd;
        @Schema(example = "왕눈이", description = "닉네임")
        private String userName;
        @Schema(example = "사원", description = "직급")
        private String userRank;
        @Schema(example = "504", description = "호실")
        private String userRoom;
        @Schema(example = "01000000000", description = "전화번호")
        private String userPhone;
    }

    @Data
    public static class Out {
        @Schema(example = "성공!", description = "성공 메세지")
        private String data;

    }

    @Data
    @Builder
    public static class Result {
        @Builder.Default
        @Schema(example = "200")
        private Integer resultCode = 200;

        @Builder.Default
        @Schema(example = "OK")
        private String resultMsg = "OK";

        @Schema(implementation = SignUpDto.Out.class)
        public Map<String,Object> data;
    }
}

 

다음은 DAO 부분입니다.

// DAO

@Mapper
public interface UserDao {
   public void insertAppSignUp(Map<String,Object> param);
   public Map<String,Object> selectAppId(Map<String,Object> param);
}

 

다음은 service부분을 만져봅시다.

 

// Service

public SignUpDto.Result signUp(SignUpDto.In in) {

        Map<String, Object> param = new HashMap<String,Object>();
        param = om.convertValue(in, new TypeReference<Map<String,Object>>(){});
        Map<String,Object> result = new HashMap<String,Object>();

        if (param.get("userId") == null) {
            result.put("error", "아이디를 입력해 주세요");
            return SignUpDto.Result.builder().data(result).build();
        } else if(param.get("passwd") == null) {
            result.put("error", "비밀번호를 입력해 주세요");
            return SignUpDto.Result.builder().data(result).build();
        } else if(param.get("userName") == null) {
            result.put("error", "닉네임을 입력해 주세요");
            return SignUpDto.Result.builder().data(result).build();
        } else if(param.get("userRank") == null) {
            result.put("error", "직급을 입력해 주세요");
            return SignUpDto.Result.builder().data(result).build();
        } else if(param.get("userRoom") == null) {
            result.put("error", "방번호를 입력해 주세요");
            return SignUpDto.Result.builder().data(result).build();
        }

        Map<String,Object> appId = userDao.selectAppId(param);

        if (appId != null) {
            result.put("error", "사용할 수 없는 아이디 입니다");
            return SignUpDto.Result.builder().data(result).build();
        } 

        userDao.insertAppSignUp(param);
        result.put("user", "회원가입에 성공하였습니다");
        return SignUpDto.Result.builder().data(result).build();
    }

 

다음은 mapper 부분입니다.

 

// Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="star.inter.dao.UserDao">

    <select id="selectAppId" resultType="map" parameterType="map">
        select a.user_id AS userId
        from user_Info a
        where a.user_id = #{userId}
    </select>

    <insert id="insertAppSignUp" parameterType="map">
        insert into user_Info
        (
          user_id
        , user_password
        , user_name
        , user_rank
        , user_room
        , user_phone
        )
        values
        (
          #{userId}
        , #{passwd}
        , #{userName}
        , #{userRank}
        , #{userRoom}
        , #{userPhone}
        )
    </insert>
    
</mapper>

 

엄청나게 간단하게 만들어 보았습니다.

 

기본적으로 회원가입을 하기 위해서는 중복되는 ID가 DB에 저장되면 안되기 때문에 if문으로 처리를 해주었습니다.

 

이렇게 중복되는 아이디가 입력되면 error 메세지를 날려주도록 만들었습니다.

 

다음은 Spring boot + Swagger 로그인 api 만들기를 작성해 보도록 하겠습니다.

728x90