カスタム Jackson モジュール (Spring Boot 1.3 を使用) を使用して、Spring REST ドキュメントに小さなテストを作成しました。私のアプリケーションのメインクラスには、@SpringBootApplication
. JacksonCustomizations
次に、次のような別のクラスがあります。
@Configuration
public class JacksonCustomizations {
@Bean
public Module myCustomModule() {
return new MyCustomModule();
}
static class MyCustomModule extends SimpleModule {
public MyCustomModule() {
addSerializer(ImmutableEntityId.class, new JsonSerializer<ImmutableEntityId>() {
@Override
public void serialize(ImmutableEntityId immutableEntityId, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
jsonGenerator.writeNumber( (Long)immutableEntityId.getId() );
}
});
}
}
}
このカスタマイズは完璧にピックアップされています。Spring Boot アプリケーションを実行すると、本来あるべき JSON が表示されます。
ただし、ドキュメント テストでは、カスタマイズは適用されません。これは私のテストのコードです:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration
@WebAppConfiguration
public class NoteControllerDocumentation {
@Rule
public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets");
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(documentationConfiguration(restDocumentation))
.build();
}
@Test
public void notesListExample() throws Exception {
mockMvc.perform(get("/api/notes/"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andDo(document("notes-list-example", responseFields(
fieldWithPath("[]").description("An array of <<note-example,note>>s."))));
}
@Configuration
@EnableWebMvc
@Import(JacksonCustomizations.class)
public static class TestConfiguration {
@Bean
public NoteController noteController() {
return new NoteController();
}
}
}
テストのアプリケーション コンテキストがJacksonCustomizations
構成をインポートする方法に注意してください。
私が見つけた他のもの:
@EnableWebMvc
ブート アプリケーションを追加すると、カスタマイズが機能しなくなります。- テストで を削除する
@EnableWebMvc
と、JSON の生成が停止します。