개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.
이 외 해결 방법 및 조언 환영합니다.

 

view에서 controller의 response를 받긴 함.

 

java.lang.StackOverflowError: null

 

하기 메세지 반복

at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.4.jar:2.11.4]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.4.jar:2.11.4]

 

view의 콘솔에서는 response 값을 찍는 중 특정 부분에서 출력이 끊기며 수백줄 반복 출력

 

- 원인 

우선 위의 '특정 부분에서 출력이 끊기며' 이 끊기는 부분이 A클래스 출력이 시작되는 부분이었다. "클래스명": 후 끊김.

Json 값에 dto가 들어있다. 그 dto가 A라는 클래스를 상속받았다.

dto안의 중첩클래스에서도 A라는 클래스를 멤버로 두기 때문에 해당 dto안에선 A라는 클래스가 중첩된다.

 

- 해결 

Json에 담지 않는 중첩클래스 선언부에 @JsonBackReference 어노테이션은 사용하여 직렬화를 수행하지 않도록 알려주었더니 해당 오류는 발생하지 않고 정상적으로 데이터를 받을 수 있었다.

 

* 직렬화란?

데이터를 연속적인 데이터로 변환하는 것을 말한다.

우리가 '데이터를 전송하기 위해 Json형태로 만드는 과정' 같은 것들을 예로 들 수 있다.

 개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.
이 외 해결 방법 및 조언 환영합니다.

 

나의 경우 p태그 안에 th:text를 사용했는데 이 기능을 사용하면 바로 태그가 닫힌 것처럼 인식되는 듯하다.

 

<p th:text="${example}">
	<a href="#">test</a>
</p>

이런 식으로 작성했을 때 a태그 자체가 나오지 않는다. 다른 태그들로 바꿔도 동일하다.

페이지를 띄워 확인했을때 p태그 안에 a태그 자체가 없는 것으로 나왔다.

<p>에서 example의 값을 읽어들이고 텍스트로 표현하고 그 이후의 태그는 싸그리 무시하고 </p>로 건너뛰는 것처럼 작동한다.

 

정확한 원인은 모르겠으나 해결방안은 하나 찾았다.

<p>
	[[${example}]]
	<a href="#">test</a>
</p>

th:text와 동일한 기능으로 작동하는 것으로 이렇게 변경하니 a태그도 정상적으로 나타났다.

https://congsong.tistory.com/26?category=749196 

 

스프링 부트(Spring Boot) - 페이징(Paging) 처리하기 [개발을 시작해봐요!]

해당 포스팅에서 화면 처리는 JSP가 아닌 타임리프(Thymeleaf) 템플릿 엔진(이하 타임리프)을 사용합니다. 이전 글에서는 프로젝트에 AOP와 트랜잭션을 적용해 보았습니다. 이번 글에서는 게시판에

congsong.tistory.com

상기 블로그를 참고하여 페이징 처리 시도 중 클래스 확인이 불가한 오류가 계속됨.

 

factoryBean.setTypeAliasesPackage("~~.dto"); 를 ~~.*로 수정하면 되는듯 하나 본인은 오류가 계속됨.

 

정상 설정 변경이 되지 않는 듯하여 DTO 클래스와 같은 패키지에 Criteria를 넣고 진행하니 오류 발생하지 않음.

 개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.

 

DB에서 쿼리 결과를 받아오는 경우 java콘솔쪽에선 카멜/언더스코어 변경 필요한 컬럼의 값이 전부 default 값으로 받아짐.

 

해당 쿼리를 MySQL에서 직접 실행 시 문제 없음.

 

1   ) application.yml에 "mybatis: configuration: map-underscore-to-camel-case: true" 잘 적혀있음. 경고나 에러 표시 없음.

 

1-1 ) DBConfiguration.java에 @PropertySource("classpath:/application.yml")로 잘 적혀있나?(기본 경로임)

  - 잘 작성돼있음.

결론 : 작동 안함...(이유 아직 모름)

 

 

 

2) ~~Mapper.xml에 resultMap 작성하고 쿼리 구문쪽에 resultMap="~~" 추가 시 값 정상적으로 들어옴.....

결론 : 작동함. 하지만 프로젝트마다 하드코딩이기 때문에 사용하지않는 것 추천

 

 

 

3-1 ) maybatis-config.xml 파일 생성 후 아래와 같이 작성

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
</configuration>

3-2 ) DBConfiguration.java의 SqlSessionFactoryBean 설정 부분에 아래 문장 추가

classpath는 설정 파일 경로마다 바뀔 수 있음.

factoryBean.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml"));

결론 : 정상 작동함. ~~Mapper.xml에서 resultMap 설정 할 필요없음. 

 

 

1번이 되지않는 관계로... 3번 방식으로 진행함.

 개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.

 

DBConfiguration.class에서 

 

매퍼 xml 등록을 위해

factoryBean.setMapperLocations(applicationContext.getResources("classpath:mappers/**/*Mapper.xml"));

추가시 하기 에러 발생

 

- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [경로/클래스명.class]

 

- Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource:

 

등등의 오류 메세지 길게 나옴

 

mapper.xml에 포함된 parametrType, resultType 등의 클래스명 앞에 경로 추가 후 하기 메세지 발생

 

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.ibatis.reflection.Reflector (file:/C:/Users/baang/.m2/repository/org/mybatis/mybatis/3.4.1/mybatis-3.4.1.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.apache.ibatis.reflection.Reflector
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

 

pom.xml에서 mybatis 버전 업데이트 후 에러 사라짐.

 개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.

 

spring security에 의해 토큰 필요

 

<head>내에 아래 삽입

<meta name="_csrf" th:content="${_csrf.token}">
<meta name="_csrf_header" th:content="${_csrf.headerName}">

 

<script>내에 아래 선언 후 헤더에 넣기

let header = $("meta[name='_csrf_header']").attr('content');
let token = $("meta[name='_csrf']").attr('content');

 개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.

 

src/main/resources/static 아래에 두고 경로를 지정하면 된다.

 개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.

 

application.yml에서 

spring datasource url 설정이 돼있음에도 url 오류 발생

 

 

pom.xml에서 

hibernate-validator, commens-dbcp2 dependency 제거 후 정상 작동

 개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.

 

자꾸 쿼리 실행 시 

Unknown column 'example_example' in 'field list' 라는 에러 발생

 

저의 경우

Unknown column 'phone_number' in 'field list' 라고 발생

 

클래스 내에서 필드명이 phoneNumber 였습니다.

중간에 대문자가 들어가는 경우 앞에 언더바( _ )가 붙고 소문자로 바뀌며 컬럼명을 찾는 것 같습니다.

phoneNumber -> phone_number

 

방법 1) 클래스 내 필드명을 소문자로 바꾼 후 정상적으로 쿼리 실행 완료!

 

방법 2) mysql에서 컬럼명을 phone_number로 바꿔줘도 됩니다!

 

방법 1, 2 중 하나만 적용하면 됩니다.

 개인적으로 문제가 해결된 방안을 공유하고자 하는 것이며

반드시 해결되지 않을 수 있음을 알려드립니다.

 

Java Bean Validation은 형식(form)의 유효성 검사를 위한 API를 제공.

pom.xml에 아래 코드를 추가한다.

 

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.13.Final</version>
</dependency>

+ Recent posts