Я уже это знаю, чтобы загрузить конфигурацию, связанную с Джексоном, в приложении. yml(
Код: Выделить всё
spring.jackson.xxx
Итак, я создаю класс конфигурации:
Код: Выделить всё
@Configuration
public class JacksonConfig {
@Autowired
private Jackson2ObjectMapperBuilder objectMapperBuilder;
@Bean
public ObjectMapper objectMapper() {
return objectMapperBuilder.build();
}
}
Код: Выделить всё
@Service
@Slf4j
public class JsonConverter {
@Getter
@Autowired
private ObjectMapper mapper;
public String objectToJson(Object obj) {
try {
return mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
log.error("Cannot serialize object {} to JSON", obj);
throw new ServiceException(ErrorCode.JSON_CONVERTER_EXCEPTION)
.addLog("log", e.getMessage());
}
}
public Object jsonToObject(Class c, String json) {
try {
return mapper.readValue(json, c);
} catch (IOException e) {
log.error("Cannot deserialize JSON as instance of class {}", c.getName());
throw ServiceException.wrap(e, ErrorCode.JSON_CONVERTER_EXCEPTION)
.addLog("json", json)
.addLog("target class", c.getName());
}
}
public String messageErrorToJson(String message) {
Map result = Collections.singletonMap("responseError", message);
return objectToJson(result);
}
}
Код: Выделить всё
@Slf4j
@SpringBootTest // we can only launch the whole context to make Jackson2ObjectMapperBuilder to work
@WebAppConfiguration
@ContextConfiguration
class JsonConverterTest {
@Autowired
private JsonConverter jsonConverter;
...
Но мне интересно, есть ли другой, более простой способ получить это. Почему мне нужно использовать @WebAppConfiguration и @ContextConfiguration? Почему @SpringBootTest не загружает значения application.yml Spring.jackson.xx?
Или, чтобы убедиться загружен файл application.yml, как ограничить загрузку классов в SpringBootTest, чтобы минимизировать количество загружаемых классов и ускорить тесты?
РЕДАКТИРОВАТЬ:
Если я удалю @WebAppConfiguration и ContextConfiguration и добавлю @SpringBootTest(class = MyApplication.class), он также загрузит весь контекст/ запустил все приложение и работает.
Подробнее здесь: https://stackoverflow.com/questions/581 ... ontext-set