강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

chl.cken님의 프로필 이미지
chl.cken

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

회원 등록 API

v1에서 v2로 바꿀때 postman이 동작하질 않습니다

작성

·

417

0

안녕하세요 v1에서 v2로 바꿀때 postman이 동작하질 않습니다

엔티티를 조금 제 입맛에 맞게 변경했는데 v1은 도작하나 v2는 동작하질 않아서.. 이게 왜 이런 오류가 나는지 모르겠습니다

 

[MemberApiController]

package mkyu.loginApi.domain.api;

import com.fasterxml.jackson.databind.annotation.JsonValueInstantiator;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.Value;
import mkyu.loginApi.domain.member.Member;
import mkyu.loginApi.domain.service.MemberService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

@RestController
@RequiredArgsConstructor
public class MemberApiController {

    private final MemberService memberService;

    //RequestBody는 json의 데이터를 Member로 다 넣어줌, 엔티티를 파라미터로 넣으면 안됨/ 수정, sns로그인 때문에 1:1이 안되서 오류남
    @PostMapping("/api/v1/members")
    public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) {
        Long idx = memberService.join(member);
        return new CreateMemberResponse(idx);
    }
    @PostMapping("/api/v2/members")
    public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) {

        Member member = new Member();
        member.setName(request.getName());

        Long idx = memberService.join(member);
        System.out.println(idx);
        return new CreateMemberResponse(idx);
    }
    //
    @Data
    static class CreateMemberRequest {
        private String name;
    }

    @Data
    static class CreateMemberResponse {
        private Long idx;

        public CreateMemberResponse(Long idx) {
            this.idx = idx;
        }
    }


}

[Member]

package mkyu.loginApi.domain.member;

import lombok.*;
import mkyu.loginApi.domain.BaseTimeEntity;
import javax.persistence.*;
import javax.validation.constraints.NotEmpty;

@Table(name = "MEMBER")
@Getter
@Setter
@NoArgsConstructor
@Entity
@AllArgsConstructor
@Builder
public class Member extends BaseTimeEntity {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_idx")
    private Long idx; //primary Key

//    @NotEmpty
    @Column(nullable = false, length = 30, unique = true)
    private String id;//아이디

//    @NotEmpty
    private String password;//비밀번호

//    @NotEmpty
    @Column(nullable = false, length = 30)
    private String name;//이름(실명)

//    @NotEmpty
    @Column(nullable = false, length = 30)
    private String mobile;//번호

//    @NotEmpty
    @Column(nullable = false, length = 30)
    private String email;//이메일

    @Column(length = 1000)
    private String refreshToken;//RefreshToken

    public Member(String password) {
        this.password = password;
    }

    public Member(String id, String password, String name, String mobile, String email) {
        this.id = id;
        this.password = password;
        this.name = name;
        this.mobile = mobile;
        this.email = email;
    }
}

[오류메시지]

2022-05-02 11:03:02.010 DEBUG 45809 --- [nio-8095-exec-1] o.s.web.servlet.DispatcherServlet        : POST "/api/v2/members", parameters={}
2022-05-02 11:03:02.013 DEBUG 45809 --- [nio-8095-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to mkyu.loginApi.domain.api.MemberApiController#saveMemberV2(CreateMemberRequest)
2022-05-02 11:03:02.014 DEBUG 45809 --- [nio-8095-exec-1] o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
2022-05-02 11:03:02.018 DEBUG 45809 --- [nio-8095-exec-1] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json;charset=UTF-8" to [MemberApiController.CreateMemberRequest(name=l2e)]
2022-05-02 11:03:02.019 DEBUG 45809 --- [nio-8095-exec-1] o.s.orm.jpa.JpaTransactionManager        : Found thread-bound EntityManager [SessionImpl(565980721<open>)] for JPA transaction
2022-05-02 11:03:02.020 DEBUG 45809 --- [nio-8095-exec-1] o.s.orm.jpa.JpaTransactionManager        : Creating new transaction with name [mkyu.loginApi.domain.service.MemberService.join]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2022-05-02 11:03:02.033 DEBUG 45809 --- [nio-8095-exec-1] o.s.orm.jpa.JpaTransactionManager        : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@211015b3]
2022-05-02 11:03:02.036  INFO 45809 --- [nio-8095-exec-1] p6spy                                    : #1651456982036 | took 0ms | statement | connection 13| url jdbc:h2:tcp://localhost/~/test
select member0_.member_idx as member_i1_0_, member0_.created_date as created_2_0_, member0_.email as email3_0_, member0_.id as id4_0_, member0_.mobile as mobile5_0_, member0_.name as name6_0_, member0_.password as password7_0_, member0_.refresh_token as refresh_8_0_ from member member0_ where member0_.name=?
select member0_.member_idx as member_i1_0_, member0_.created_date as created_2_0_, member0_.email as email3_0_, member0_.id as id4_0_, member0_.mobile as mobile5_0_, member0_.name as name6_0_, member0_.password as password7_0_, member0_.refresh_token as refresh_8_0_ from member member0_ where member0_.name='l2e';
2022-05-02 11:03:02.041  INFO 45809 --- [nio-8095-exec-1] p6spy                                    : #1651456982041 | took 1ms | statement | connection 13| url jdbc:h2:tcp://localhost/~/test
insert into member (member_idx, created_date, email, id, mobile, name, password, refresh_token) values (default, ?, ?, ?, ?, ?, ?, ?)
insert into member (member_idx, created_date, email, id, mobile, name, password, refresh_token) values (default, NULL, NULL, NULL, NULL, 'l2e', NULL, NULL);
2022-05-02 11:03:02.041  WARN 45809 --- [nio-8095-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 23502, SQLState: 23502
2022-05-02 11:03:02.041 ERROR 45809 --- [nio-8095-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : NULL not allowed for column "EMAIL"; SQL statement:
insert into member (member_idx, created_date, email, id, mobile, name, password, refresh_token) values (default, ?, ?, ?, ?, ?, ?, ?) [23502-200]
2022-05-02 11:03:02.042 DEBUG 45809 --- [nio-8095-exec-1] o.s.orm.jpa.JpaTransactionManager        : Initiating transaction rollback
2022-05-02 11:03:02.042 DEBUG 45809 --- [nio-8095-exec-1] o.s.orm.jpa.JpaTransactionManager        : Rolling back JPA transaction on EntityManager [SessionImpl(565980721<open>)]
2022-05-02 11:03:02.042  INFO 45809 --- [nio-8095-exec-1] p6spy                                    : #1651456982042 | took 0ms | rollback | connection 13| url jdbc:h2:tcp://localhost/~/test

;
2022-05-02 11:03:02.043 DEBUG 45809 --- [nio-8095-exec-1] o.s.orm.jpa.JpaTransactionManager        : Not closing pre-bound JPA EntityManager after transaction
2022-05-02 11:03:02.043 DEBUG 45809 --- [nio-8095-exec-1] o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor
2022-05-02 11:03:02.043 DEBUG 45809 --- [nio-8095-exec-1] o.s.web.servlet.DispatcherServlet        : Failed to complete request: org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
2022-05-02 11:03:02.050 ERROR 45809 --- [nio-8095-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause

org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "EMAIL"; SQL statement:
insert into member (member_idx, created_date, email, id, mobile, name, password, refresh_token) values (default, ?, ?, ?, ?, ?, ?, ?) [23502-200]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:459) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.engine.SessionRemote.done(SessionRemote.java:611) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:191) ~[h2-1.4.200.jar:1.4.200]
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:152) ~[h2-1.4.200.jar:1.4.200]
	at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-4.0.3.jar:na]
	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:na]
	at com.p6spy.engine.wrapper.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:94) ~[p6spy-3.9.0.jar:na]
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract(GetGeneratedKeysDelegate.java:58) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:43) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3279) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3885) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:84) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:645) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:282) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:263) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:317) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:330) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:123) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:756) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:742) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
	at jdk.internal.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362) ~[spring-orm-5.3.19.jar:5.3.19]
	at jdk.proxy2/jdk.proxy2.$Proxy100.persist(Unknown Source) ~[na:na]
	at jdk.internal.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) ~[spring-orm-5.3.19.jar:5.3.19]
	at jdk.proxy2/jdk.proxy2.$Proxy100.persist(Unknown Source) ~[na:na]
	at mkyu.loginApi.domain.repository.MemberRepository.save(MemberRepository.java:17) ~[classes/:na]
	at mkyu.loginApi.domain.repository.MemberRepository$$FastClassBySpringCGLIB$$cfc41407.invoke(<generated>) ~[classes/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.19.jar:5.3.19]
	at mkyu.loginApi.domain.repository.MemberRepository$$EnhancerBySpringCGLIB$$e8dc9246.save(<generated>) ~[classes/:na]
	at mkyu.loginApi.domain.service.MemberService.join(MemberService.java:24) ~[classes/:na]
	at mkyu.loginApi.domain.service.MemberService$$FastClassBySpringCGLIB$$316efea1.invoke(<generated>) ~[classes/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.19.jar:5.3.19]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.19.jar:5.3.19]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.19.jar:5.3.19]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.19.jar:5.3.19]
	at mkyu.loginApi.domain.service.MemberService$$EnhancerBySpringCGLIB$$b1b444be.join(<generated>) ~[classes/:na]
	at mkyu.loginApi.domain.api.MemberApiController.saveMemberV2(MemberApiController.java:34) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.19.jar:5.3.19]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.19.jar:5.3.19]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.62.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.19.jar:5.3.19]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.62.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.19.jar:5.3.19]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.19.jar:5.3.19]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.19.jar:5.3.19]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
	at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]

2022-05-02 11:03:02.052 DEBUG 45809 --- [nio-8095-exec-1] o.s.web.servlet.DispatcherServlet        : "ERROR" dispatch for POST "/error", parameters={}
2022-05-02 11:03:02.053 DEBUG 45809 --- [nio-8095-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
2022-05-02 11:03:02.053 DEBUG 45809 --- [nio-8095-exec-1] o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
2022-05-02 11:03:02.054 DEBUG 45809 --- [nio-8095-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
2022-05-02 11:03:02.055 DEBUG 45809 --- [nio-8095-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Writing [{timestamp=Mon May 02 11:03:02 KST 2022, status=500, error=Internal Server Error, path=/api/v2/membe (truncated)...]
2022-05-02 11:03:02.055 DEBUG 45809 --- [nio-8095-exec-1] o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor
2022-05-02 11:03:02.056 DEBUG 45809 --- [nio-8095-exec-1] o.s.web.servlet.DispatcherServlet        : Exiting from "ERROR" dispatch, status 500

감사합니다!! 

답변 1

2

안녕하세요. chl.cken님, 공식 서포터즈 David입니다.

Member 엔티티의 Email 필드는 nullable이 false이므로 Not Null Column입니다.

v2 api에서 Email을 요청으로부터 넘겨받지만 Member 객체의 필드에 데이터를 set해주는 것은 name만 해주네요. 그러면 당연히 Member 객체 내 Email 필드는 null일테고 이 상태로 저장하면 Not Null 관련 에러가 발생하게 됩니다.

올려주신 에러 로그 중 아래 라인을 참고해주세요.

org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "EMAIL"; SQL statement

감사합니다.

chl.cken님의 프로필 이미지
chl.cken
질문자

답변 감사합니다^^...ㅠㅠㅠㅠㅠㅠ 아래 코드 고쳐봤습니다

@PostMapping("/api/v2/members")
    public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) {

        Member member = new Member();
        member.setName(request.getName());

        Long idx = memberService.join(member);
        System.out.println(idx);
        return new CreateMemberResponse(idx);
    }

---------------------------아래처럼 수정 --------------------------
@PostMapping("/api/v2/members")
    public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) {

        Member member = new Member();
        member.setName(request.getName());
        member.setEmail(request.getEmail());
Long idx = memberService.join(member); System.out.println(idx); return new CreateMemberResponse(idx); 

 

chl.cken님의 프로필 이미지
chl.cken

작성한 질문수

질문하기