
이렇게 만들어준다.

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를 하게 되면 이런 오류문이 나타나게 된다.
'spring boot' 카테고리의 다른 글
thymeleaf 의 기본 문법 // Controller (1) | 2024.04.03 |
---|---|
theyeleaf 사용 (0) | 2024.04.01 |
Spring boot 유효성 검사 //해당하는 내역 보여주기. / Jasypt 암호화 (0) | 2024.03.14 |
Spring boot @handleMethodArgumentNotValid / delete/@Transactional (0) | 2024.03.12 |
Spring boot 오류에 대한 설정/ UPDATE /{ID} (0) | 2024.03.11 |