【问题标题】:RestAssured- object in body throws Error体内的 RestAssured- 对象抛出错误
【发布时间】:2017-08-13 17:17:21
【问题描述】:

我通过测试的对象

@Data
public class UserRequest {
@JsonProperty("name")
private final String name;
@JsonProperty("surname")
private final String surname;
@JsonProperty("email")
private final String email;
@JsonProperty("iaAdmin")
private final boolean isAdmin;

}

比我测试过

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerIT {

@LocalServerPort
private int port;

@Test
public void testIsCreatingNewUser() throws IOException{
    given()
            .when()
            .body(new UserRequest("asd","sad","asd",false))//.body(TestGenerator.getUserRequest())
            .port(port)
            .post("/user/" + TestGenerator.randomUUID)
            .then()
            .statusCode(HttpStatus.SC_CREATED);
}

我遇到了错误:

java.util.ServiceConfigurationError: com.fasterxml.jackson.databind.Module: Provider com.fasterxml.jackson.module.kotlin.KotlinModule could not be instantiated

在栈底

Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.DefaultConstructorMarker
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 79 more

这是怎么回事?! Kotlin...我使用 java 和 spring boot v2.0 m3

【问题讨论】:

  • 您使用的是什么 IDE?有时下载的依赖项会出现错误(下载不完整、文件损坏......等)尝试删除 .m2/com/fasterxml/jackson/module/kotlin 文件夹并尝试刷新项目以再次下载所有依赖项。
  • 您的环境的一部分似乎使用了 kotlin,这是一种可以放在 JVM 之上以扩展语言的语言。例如,您有 Android Studio 吗?您可能可以追踪到您正在使用的组件依赖于 Kotlin。
  • Intellij IDEA 2017.2,我有好久没用的android studio bur。我会尝试删除 .m2
  • 删除.m2并再次下载源不起作用,可能是spring boot v2故障
  • 好的。应该包含它,但尝试将 kotlin 依赖项添加到 pom.xml:org.jetbrains.kotlinkotlin-stdlib1.1.3-2依赖>

标签: java rest-assured


【解决方案1】:

我自己回答问题。感谢@Sebastian Duque 评论我添加了依赖项 http://www.baeldung.com/spring-boot-kotlin 它帮助了......

<!--kotlin/ it needs jackson to map objects-->
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib-jre8</artifactId>
        <version>1.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-reflect</artifactId>
        <version>1.1.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
        <version>2.9.0</version>
    </dependency>


但奇怪的是 Spring Boot v2 中的 Jackson 需要 Kotlin 依赖项...我使用 spring-boot 启动器中的 jackson 依赖项,所以我没有包含任何 jackson。

【讨论】:

    【解决方案2】:

    如果你使用 maven 从 spring-boot 依赖中排除

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.0.0.M6</version>
        <exclusions>
            <exclusion>
                    <groupId>com.fasterxml.jackson.module</groupId>
                    <artifactId>jackson-module-kotlin</artifactId>
            </exclusion>
        </exclusions>
     </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>2.0.0.M6</version>
        <scope>test</scope>
        <exclusions>
            <exclusion>
               <groupId>com.fasterxml.jackson.module</groupId>
               <artifactId>jackson-module-kotlin</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    对于其他构建工具,请更新此解决方案

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      相关资源
      最近更新 更多