根据我的理解,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) 我花了一天的时间试图找到解决方案,但找不到任何解决此问题的在线资源。
我正在为我的应用程序使用 Gson 进行消息转换,它在单元测试之外工作正常。我什至添加了一个HttpMessageConvertersbean 来优先于 Jackson,而不是将配置值写入application.yml. 这仅在运行应用程序时有效。
现在我的问题是,我如何使用 Gson 序列化/反序列化MockMvc?我有一个带有@SerializedName("field_one")注释的类,其值与实际名称不同。我最接近找到答案的是下面一个没有帮助的答案:
任何想法如何替换ObjectMapper或MockMvc使用 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) 我正在使用 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) 我们有一个 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 ×3
spring-boot ×2
compile-time ×1
gradle ×1
gson ×1
jackson ×1
mockmvc ×1
reactive ×1
runtime ×1