본문 바로가기
spring boot

Spring boot 복습

by improve 2024. 3. 18.

 

이렇게 만들어준다.

 

package 형식은 이렇게 만들어 준다.

 

 

⚫️Member

package com.mh.restapi05.member;

import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;

import java.time.LocalDateTime;

@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "users")
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 50, nullable = false)
    private String username;
    @Column(length = 50,nullable = false)
    private String password;
    @Column(length = 50,nullable = false, unique = true)
    private String email;

    @Enumerated(EnumType.STRING)
    private Role role;

    @CreatedDate // 작성일자를 자동으로 입력해준댜.(insert 한 시간)
    private LocalDateTime writedate;
    @LastModifiedDate // 수정일자를 자동으로 입력해준다.(select/ update 한 시간)
    private LocalDateTime modifydate;

}

 

Entity 로 테이블을 만들어준다. Table로 테이블 이름을 지정해준다. 지정해주지 않으면 기본 클래스 명으로 만들어 진다.

 

 

⚫️MemberService

package com.mh.restapi05.member;


import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
@RequiredArgsConstructor
public class MemberService {

    private final MemberRepository memberRepository;

    public Member save(Member member){

        Optional<Member> optionalMember = memberRepository.findByEmail(member.getEmail());
        // 안에 내용이 있으면(같은 이메일이 있으면)
        if (optionalMember.isPresent()){
            throw new IllegalStateException("이미존재하는 회원입니다");
        }

        return memberRepository.save(member);

    }
}

 

service는 이렇게 만들어준다.

 

⚫️MemberRepository

package com.mh.restapi05.member;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;


@Repository
public interface MemberRepository extends JpaRepository<Member,Long> {


    //select * from member where email = ?
    // 해당하는 이메일이 있는지 검사
    Optional<Member> findByEmail(String email);
}

 

 

JPA로 사용하게 되면 CRUD가 만들어 진다.

 

 

 

⚫️MemberDto

package com.mh.restapi05.member;


import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class MemberDto {
    // 유효성 검사하는 클래스
    private Long id;

    @Size(min = 3, max = 50)
    private String username;
    @NotBlank
    private String password;
    @NotBlank
    private String email;

    private Role role;

}

 

Dto class 는 말그대로 유효성을 검사하는 클래스이다.

username의 칼럼의 사이즈는 최소 3 최대 50길의 문자열이 들어올 수있다 안들어오는건 오류문이 발생 하게 된다.

NotBlank 로 빈칸이 있으면 안된다는 형식으로 만들어준다.

 

 

 

 

⚫️ErrorReponse

package com.mh.restapi05.exception;

import jakarta.validation.constraints.NotBlank;
import lombok.*;

@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ErrorReponse {
    private String message;
    private String reason;

}

 

오류문에 나타낼 문자를 지정한다.

 

 

⚫️GlobalExceptionHandler

package com.mh.restapi05.exception;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.web.ErrorResponse;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
        System.out.println("일로오나");
        ErrorReponse errorReponse = ErrorReponse.builder()
                .message("잘못된 요청")
                .reason("유효성 검사 실패")
                .build();
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorReponse);
    }
}

 

reponse 로 만들어진 문자열에 해당하는 문자를 입력한다.

이렇게 하면 Dto 에 만들어진 username, password, email값이 빈칸이거나 size가 달라지면 

이런 오류문이 발생하게 된다.

 

 

postman으로 post를 하게 되면 이런 오류문이 나타나게 된다.