小编Mar*_*ell的帖子

Jackson:如果有多个序列化程序,使用哪一个?

我正在使用Jackson来序列化 POJO。我为字符串值编写了一个自定义序列化程序,它工作正常。

但是,当两个序列化程序注册为相同类型时,我不确定会发生什么。在我的测试中,使用了最后一个添加的,但我不确定它是否一直都这样工作。

所以我的问题是:如果我为同一类型添加多个序列化程序,将使用哪一个?


代码片段:

objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(new CustomSerializer1());
module.addSerializer(new CustomSerializer2());
Run Code Online (Sandbox Code Playgroud)

...

class CustomSerializer1 extends NonTypedScalarSerializerBase<String>
class CustomSerializer2 extends NonTypedScalarSerializerBase<String>
Run Code Online (Sandbox Code Playgroud)

java serialization json jackson

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

无法注册MBean

我正在为Spring-boot应用程序编写集成测试,并且正在为基本方法和所有其他常见内容使用基本测试类。像这样:

@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = ...)
@Sql(scripts = { "script1.sql", ... }, ...)
public abstract class ITBase {
...
Run Code Online (Sandbox Code Playgroud)

我有一个文件生成器,该文件生成器自动连接到服务中,该服务自动连接到控制器中。我正在使用RestTemplate测试控制器。我想模拟文件生成器,只返回一个随机字符串。

因为它是一个Spring Bean,所以我理解我应该以这种方式在测试中使用@MockBean批注:

public class ControllerIT extends ITBase {

@MockBean
private FileGenerator fileGenerator;

@Test
@Transactional
public void testSomeTest() {
...
Run Code Online (Sandbox Code Playgroud)

我的问题是:

如果我运行给定的测试类,则所有测试均通过。但是,如果我运行所有测试类,则会得到UnableToRegisterMBeanException。stacktrace看起来像这样:

java.lang.IllegalStateException: Failed to load ApplicationContext

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.boot.test.autoconfigure.AutoConfigureReportTestExecutionListener.prepareTestInstance(AutoConfigureReportTestExecutionListener.java:49)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
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) …
Run Code Online (Sandbox Code Playgroud)

java spring jmx mockito spring-boot

2
推荐指数
2
解决办法
7415
查看次数

标签 统计

java ×2

jackson ×1

jmx ×1

json ×1

mockito ×1

serialization ×1

spring ×1

spring-boot ×1