2017-04-21 5 views
1

AllBenutzerdefinierte Jackson2ObjectMapperBuilder nicht in einem Integrations springboot Test erkannt

I wie unten Jackson2ObjectMapperBuilder in meiner Haupt-Frühlings-Boot-Anwendungsklasse angepasst habe.

public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
} 

@Autowired 
public void configureJackson(Jackson2ObjectMapperBuilder builder) { 
    builder.filters(new SimpleFilterProvider().addFilter("customFilter", new ExampleFilter())); 
} 

wo ExampleFilter eine Erweiterung von SimpleBeanPropertyFilter ist. Meine POJOs sind mit Jackson @JsonFilter("customFilter") kommentiert.
Ich habe die POJOs über HTTP mit @RestController und @GetMapping Annotationen ausgesetzt. Dies funktioniert einwandfrei und der benutzerdefinierte Filter wird aufgerufen, wenn ich die Anwendung ausführen und auf den Endpunkt zugreifen.

Jetzt habe ich einen Integrationstest wie folgt geschrieben.

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

    @LocalServerPort 
    private int port; 

    @Autowired 
    private TestRestTemplate restTemplate; 

    @Test 
    public void getUser() throws Exception { 
     POJO obj = this.restTemplate.getForObject("http://localhost:" + this.port + "/pojo", POJO.class); 

     Assertions.assertThat(obj).isNotNull(); 
     Assertions.assertThat(obj.getFirstName()).isEqualTo("Jane"); 
     Assertions.assertThat(obj.getLastName()).isEqualTo("Doe"); 
     Assertions.assertThat(obj.getAge()).isEqualTo("24"); 
    } 
} 

Wenn ich den Test ausführen, die obj als null kommt, und ich sehe einen Fehler, dass no FilterProvider configured

Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Can not resolve PropertyFilter with id 'customFilter'; no FilterProvider configured; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not resolve PropertyFilter with id 'customFilter'; no FilterProvider configured 

Was mache ich falsch und wie kann ich das korrigieren?

Meine Ordnerstruktur ist:
src/main/java/com/a/b/c/Application.java
src/main/java/com/a/b/c/Controller/ControllerA.java

src/test/java/com/a/b/c/Controller/IntegrationTest.java

Antwort

0

ich habe diese Arbeit von Jackson2ObjectMapperBuilder auf eine etwas andere Art und Weise in der Hauptanwendungsdatei zu konfigurieren, wie unten dargestellt. Aber ich weiß immer noch nicht, warum der Autowiring-Ansatz nicht funktioniert.

@Bean 
public Jackson2ObjectMapperBuilder objectMapperBuilder() { 
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); 
    builder.filters(new SimpleFilterProvider().addFilter("customFilter", new ExampleFilter())); 
    return builder; 
} 

Ich würde immer noch, dass im Test Zusammenhang gerne wissen, warum das Auto Jackson2ObjectMapperBuilder nicht konfiguriert ist, die individuell gestaltet werden aufgenommen, während es mit @Bean Arbeiten zu ersetzen.

Verwandte Themen