IT recording...

[Spring] 개발 중 마주한 오류들 - 1 본문

Spring

[Spring] 개발 중 마주한 오류들 - 1

I-one 2022. 2. 15. 00:49

220215 개발 중 마주한 오류들 (만나서 반가웠고 앞으론 보지말자..^^)

[원문 링크]

https://adorable-aspen-d23.notion.site/Spring-c0443ed9fa2448ca8848fe5cd6801ec5

 

[Spring] 개발 중 마주한 오류들

403 ERROR

adorable-aspen-d23.notion.site

403 ERROR

  • 스프링 시큐리티 403 Forbidden 에러
  • 사용하는 컨트롤러를 securityConfig에 명시해 줘야 하는데 그러지 않아서 발생한 오류
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class
SecurityConfig extends WebSecurityConfigurerAdapter {
		...
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        **http.csrf().disable();**

        http
            .authorizeRequests()
            .antMatchers("/api/v1/auth/**","/", **"/api/v1/ggultip/*"**,
                    "/v2/api-docs", "/swagger-resources/**", "/swagger-ui/index.html", "/swagger-ui.html","/webjars/**", "/swagger/**",   // swagger
                    "/h2-console/**",
                    "/favicon.ico").permitAll()
            .anyRequest().authenticated();  // 나머지 API 는 전부 인증 필요
			...
    }
}

[Spring Security] 스프링 시큐리티 403 Forbidden 에러

Enum 값

  • 아래의 enum에서 ALL 이 아니라 All 을 db에 저장했더니 ‘No enum constant’ 에러 남
@Getter
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public enum GgultipCategoryType {

    ALL("전체"),
    CELEBRITY("연예인"),
    STYLING("스타일링"),
    EVENT("이벤트");

    private final String category;
}

스터디할래 - 11주차 과제: Enum

enum 사용하기

Message “can’t parse JSON. Raw result”

  • json말고 raw로 내놔 → 어쨌든 데이터 형식이 다르다는 것
  • 배열 객체를 리턴할 때 그냥 List 형태로 리턴하는게 아니라 jsonArray를 사용하여 리턴해서 해결하였다.
static List<GgultipContentResponse> getContentResponses(Ggultip ggultip){
    **JSONArray jsonArray = new JSONArray();**
    for(GgultipContent ggultipContent: ggultip.getContents()){
        jsonArray.add(GgultipContentResponse.of(ggultipContent));
    }
    return jsonArray;
}

SpringBoot로 JSON 응답 보내는 방법 (GSON JsonObject, @ResponseBody, @RestController)

JAVA에서 JSON 데이터 만들기

SpringBoot No Serializer found for class 에러

  • 내가 만든 클래스에서 serializer를 찾을 수 없다
  • → 내가 만든 데이터 형식을 private으로 지정하거나, getter가 없는지 확인하자
  • 나는 getter추가해서 해결
**@Getter**
public class GgultipContentResponse {
...
}

No property id found for type 에러

  • 진짜 너무너무너무 화가 났던 에러
  • XXXRepository, XXXRepositoryImpl, XXXRepositoryCustom 이름 맞췄는지 확인하기 (이미 되어있었음)
  • 필드가 잘못됐나 확인
  • find, exists, count, delete 첫 이름이 이것만 된다그래서 첫 이름 그걸로도 바꿔봄 → 당연히 안됨
@Override
public boolean saveBookmark(GgultipBookmark ggultipBookmark) {
    em.persist(ggultipBookmark);
    return true;
}
  • GgultipBookMarkRepositoryImpl
    • 이렇게 적어놨었는데 querydsl은 save가 안먹는다고 해서 entitymanger사용해서 save하는 메소드를 작성했는데,
    • 허무하게 그냥 save 메소드는 기본으로 존재했다...

⇒ 서비스에서 그냥 repository.save 호출

@Transactional
public void setBookmark(Long ggultip_id, Long user_id){
    GgultipBookmark bookmark = ggultipBookMarkRepository.findBookmarkByGgultipIdAndUserId(ggultip_id,user_id);
    if(bookmark == null){//새로 생성
        Ggultip ggultip = ggultipRepository.findByGgultipId(ggultip_id);
        User user = userRepository.findUserById(user_id);
        GgultipBookmark ggultipBookmark = new GgultipBookmark();
        ggultipBookmark.createGgultipBookmark(ggultip, user);
        **ggultipBookMarkRepository.save(ggultipBookmark); //그냥 이렇게 써서 해결**
    }
    else{//이미 존재
        if(bookmark.isBookmarkUsing()){
            throw new NotFoundException(String.format("이미 북마크된 상태입니다."), NOT_FOUND_EXCEPTION);
        }
        else{
            bookmark.setBookmark();
        }
    }
}

No property id found for type Project! Traversed path: App.project. 에러 (JPA 에러)

spring data jpa querydsl property not found 에러

CrudRepository: saveAll - No property saveAll found for type

https://jessyt.tistory.com/35

해결방법 인사이트를 얻은 곳

NULL not allowed for column SQL statement: insert into

  • 자꾸 BOOK_MARK_USING이 null이라서 안된다는데 분명히 지정해줬는데 이상하다하고 디버깅 해보니 id가 null이었다. 그래서 생성이 잘못 된 줄알고 그거 고쳤는데도 안되길래 일단 집에 옴
  • 그 후 generatedvalue 찾아보니 commit 될 때 자동으로 생성된다네 → id는 문제가 아님
  • book_mark_using이 왜 문제지 하고 계속 팠는데 결국 허무한 곳에서 발견
  • 반복되는 rename으로 h2디비에 BOOK_MARK_USING 컬럼이 하나 더 생겨버린 것 ... 컬럼하나 멀쩡히 살아있는데 지정안해주니까 얘는 당연히 그러지,, → 해당 컬럼 db에서 drop 해서 해결했다

JPA 4 : @GeneratedValue 기본키 매핑 전략 정리

JPA - 기본키 생성 전략

Comments