小编Bra*_*don的帖子

什么时候在Java/Gradle中使用Run-time而不是Compile-time依赖?

根据我的理解,Gradle将继承所有compile依赖项作为runtime依赖项.

你应该只使用runtime什么实例?调用compile时,所有子依赖项都会从编译中获取并进入编译gradle build.

例如,当我打电话给我打印的内容时,我会做差异

> gradle -q dependencies
Run Code Online (Sandbox Code Playgroud)

打印出来用于编译运行时的列表是相同的.两个示例输出可能会显示以下内容:

+--- org.springframework.boot:spring-boot-starter-web: -> 1.5.4.RELEASE
|    +--- org.springframework.boot:spring-boot-starter:1.5.4.RELEASE
|    |    +--- org.springframework.boot:spring-boot:1.5.4.RELEASE
|    |    |    +--- org.springframework:spring-core:4.3.9.RELEASE
|    |    |    \--- org.springframework:spring-context:4.3.9.RELEASE
|    |    |         +--- org.springframework:spring-aop:4.3.9.RELEASE
|    |    |         |    +--- org.springframework:spring-beans:4.3.9.RELEASE
|    |    |         |    |    \--- org.springframework:spring-core:4.3.9.RELEASE
|    |    |         |    \--- org.springframework:spring-core:4.3.9.RELEASE
|    |    |         +--- org.springframework:spring-beans:4.3.9.RELEASE (*)
|    |    |         +--- org.springframework:spring-core:4.3.9.RELEASE
| …
Run Code Online (Sandbox Code Playgroud)

java runtime compile-time gradle

6
推荐指数
1
解决办法
1327
查看次数

如何在 MockMvc 中使用 Gson 而不是 Jackson?

我花了一天的时间试图找到解决方案,但找不到任何解决此问题的在线资源。

我正在为我的应用程序使用 Gson 进行消息转换,它在单元测试之外工作正常。我什至添加了一个HttpMessageConvertersbean 来优先于 Jackson,而不是将配置值写入application.yml. 这仅在运行应用程序时有效。

现在我的问题是,我如何使用 Gson 序列化/反序列化MockMvc?我有一个带有@SerializedName("field_one")注释的类,其值与实际名称不同。我最接近找到答案的是下面一个没有帮助的答案:

/sf/answers/1435701991/

任何想法如何替换ObjectMapperMockMvc使用 Gson 而不是 Jackson?


编辑:要添加更多上下文:

当我尝试发送一个Model用 Gson 转换为 Json 的文件时,它立即被拒绝(400),因为我@NotNull对模型中的每个字段都有注释。当它在控制器中反序列化时,它将字段设置为空。下面的例子有@Valid,它确保Model签出。

@RequestMapping(value = "accept", method = RequestMethod.POST)
public Model resp(@Valid @RequestBody Model model){
    return model;
}
Run Code Online (Sandbox Code Playgroud)

另一方面,当我到达一个没有 的端点时@Valid,传递了一个让杰克逊满意的 json,然后我得到了一个模型,我无法检查任何字段:

mockMvc.perform(
    post("/test/accept")
        .contentType(MediaType.APPLICATION_JSON)
        .content(json))
    .andExpect(jsonPath("$.field_one", is("Hello world!")))
Run Code Online (Sandbox Code Playgroud)

例外:

java.lang.AssertionError: No value at JSON path "$.field_one", exception: No results for …
Run Code Online (Sandbox Code Playgroud)

java jackson gson mockmvc

5
推荐指数
1
解决办法
446
查看次数

是否有与 spring-data-jpa 一起使用的新 @Type 注释?

我正在使用 SQL Server 和 Spring Data JPA。我正在尝试让该uniqueidentifier类型正常工作,但它似乎用作uuid_byte类型而不是uuid_char. 我看到其他较旧的帖子说要使用注释@Type(type = "uuid_char"),但它似乎不存在于 spring-data-jpa 包中。

当搜索这个臭名昭著的@Type注释时,我只能找到一些东西org.hibernate:hibernate-annotations。最后一次更新是在 2010 年。这仍然是建议的方式吗?如果是这样,是否有一个包含此内容的 spring 包,这样我就不会遇到兼容性问题?

当尝试使用它时,我收到以下错误:

java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:106)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at …
Run Code Online (Sandbox Code Playgroud)

hibernate-annotations spring-data-jpa spring-boot

5
推荐指数
1
解决办法
4864
查看次数

为什么在 flatmap 中模拟 Mono.empty() 的响应会以错误结束?

我们有一个 methodA 它返回:

return bObj.methodB()
    .flatMap(x -> cObj.methodC(x));
Run Code Online (Sandbox Code Playgroud)

methodB 返回Mono<String>,methodC 返回Mono<Void>

使用 Mockito 时,我们可以模拟 methodB,但不能模拟 methodC。

when(bObj.methodB()).thenReturn(Mono.just("x"));
when(cObj.methodC(eq("x"))).thenReturn(Mono.empty());

aObj.methodA();
Run Code Online (Sandbox Code Playgroud)

当它运行时,我们得到以下异常:

java.lang.NullPointerException: The mapper returned a null Publisher
Run Code Online (Sandbox Code Playgroud)

当运行应用程序时,这可以正常工作,但当使用 Mockito 运行时,却不能。我认为这与 flatMap 有关,但无法弄清楚。参考这个问题似乎应该有效,但事实并非如此。有任何想法吗?

java spring-boot reactive

1
推荐指数
1
解决办法
3848
查看次数