build.gradle의 dependencies에 다음 코드를 추가해주고 reload 시켜주면 

//JUnit4 추가
testImplementation("org.junit.vintage:junit-vintage-engine") {
    exclude group: "org.hamcrest", module: "hamcrest-core"
}

 

import org.junit.runner.RunWith;

import문이 잘 먹힌다. 해결!

 

참고로 junit5는 @RunWith(SpringRunner.class)이 아닌 @ExtendWith(SpringExtension.class)를 사용한다고 한다.

 

 


참고한 블로그

: https://velog.io/@hyeon030/Junit5-RunWithSpringRunner.class

 

오류 상황

Thymeleaf를 이용해 view를 구현하고 있는데 th:object에 객체가 담기지 않는 오류가 발생했다.

컨트롤러에서 메서드를 어떻게 만져도 해결되지 않았다. 

 

해결 방법

상단의 타임리프 라이브러리 추가하는 부분에 www.를 제거하면 된다.

변경 전

<html xmlns:th="http://www.thymeleaf.org">

변경 후

<html xmlns:th="http://thymeleaf.org">

말끔히 해결..ㅎ

코드 오류가 아닌 라이브러리 주소 참조 오류였다..

이렇게 배우는 것 없는 오류 잡는게 제일 허무한 것 같다.

그래도 이런 라이브러리 참조에서도 오류가 날 수 있다는 점을 깨달았다.

다음에 같은 오류를 만나게 되면 더 빨리 오류를 해결할 수 있을 것 같다!

4~5시간은 이 오류를 해결하는데 시간 투자를 한거 같다..  아무튼 오류 잡았으니 해^ㅡㅡ^피!

 


출처 : https://stackoverflow.com/questions/38710585/spring-boot-thymeleaf-in-intellij-cannot-resolve-vars

이번에 만난 오류는..

웹페이지로 test를 해보려 Swagger 접속주소(http://localhost:[사용포트번호]/swagger-ui.html)에 접근했는데 

코드에도 문제가 없고, 심지어 콘솔에서도 오류가 없는데 안열리는 경우였다.

 

 

그럴 때는 코드 상의 오류가 아니라 설정 파일이 잘못 되었다는 것인데 

swagger를 사용하기 위해서는 

1. pom.xml에 의존성을 추가해야 한다.

	<!-- Swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

 

2. SwaggerConfiguration 파일을 만들어주어야 한다.

SwaggerConfiguration

package com.springboot.valid_exception.config.annotation;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/** Swagger 환경 설정 **/

@Configuration // 환경(설정)에 관한 일을 함
@EnableSwagger2 // swagger를 활성화 시키겠습니다(enable)
public class SwaggerConfiguration {
    @Bean
    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.springboot.valid_exception")) 
                // 어디부터 어디까지 component-scan 역할
                .paths(PathSelectors.any())
                .build();
    }

    /** ui에 뿌려주는 부분 **/
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot Open API Test with Swagger")
                .description("설명")
                .version("1.0.0")
                .build();
    }
}

 

그리고 특히나 여기 주의할 점은

Config파일 특성한 이전 프로젝트나 따로 정리해둔 코드를 그대로 사용하는 경우가 많은데

basePackage에서 설정한 패키지를 test하는 데 사용하므로 현재 사용 중인 프로젝트로 설정되어 있는지 꼭 확인하자!

 

필자는 이 부분이 문제였다..ㅎ

문제의 오류 메세지

 

해결 방법

괄호 개수 확인해보세요 

{}} []] ()) 이런 식으로 되어있을 가능성 매우 다분함

콘솔 창의 오류 메세지를 살펴 보자.. 

Request processing failed; 
nested exception is org.mybatis.spring.MyBatisSystemException: 
nested exception is org.apache.ibatis.reflection.ReflectionException: 
There is no getter for property named 'zipnum' in 'class com.team6.sts.vo.MemberVO'

 

 

VO 객체의 멤버 변수에 설정해놓은 변수명과  쿼리문 안의 파라미터 명이 달라서 생긴 오류였다. n N ..ㅎ

콘솔 창을 살펴보자..

심각: 경로 [/sts]의 컨텍스트 내의 서블릿 [appServlet]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; 
nested exception is org.mybatis.spring.MyBatisSystemException: 
nested exception is org.apache.ibatis.reflection.ReflectionException: 
There is no getter for property named 'id' in 'class java.lang.String']을(를) 발생시켰습니다.

 

결론적으로 xml의 반환 타입과 DAO의 반환 타입이 맞지 않았기 때문이였다....ㅎ

 


 

수정된 코드

왼쪽은 DAO     |    오른쪽은 member.xml

 

 

+ Recent posts