Spring Boot/@JDBCTest — нет подходящего bean-компонента типа com.fasterxml.jackson.databind.ObjectMapper.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Boot/@JDBCTest — нет подходящего bean-компонента типа com.fasterxml.jackson.databind.ObjectMapper.

Сообщение Anonymous »

Здесь мы немного новичок в Spring Boot, так что будем благодарны за любую помощь!
Я создал приложение Spring Boot с помощью JDBCTemplate, которое запускается и работает нормально, без ошибок и исключений.
Я создал тестовый класс и хочу использовать @JdbcTest для тестирования моих объектов Dao. Однако каждый раз, когда я запускаю тест, я получаю java.lang.IllegalStateException: не удалось загрузить ApplicationContext. Кажется, возникла проблема с моими классами контроллера. Это IllegalStateException вызвано:

Код: Выделить всё

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'assetApiController' defined in file [/PATH/TO/FILE]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.fasterxml.jackson.databind.ObjectMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Мой тестовый класс:

Код: Выделить всё

@JdbcTest
@Sql({"schema.sql", "test-data.sql"})
class AssetApiControllerTest {

@Autowired
private JdbcTemplate jdbcTemplate;

@Autowired
AssetDao assetDao;

@Test
void delete() throws DataAccessException {
assetDao.setJdbcTemplate(jdbcTemplate);

assetDao.deleteByPk(new AssetKey(1), null);
assertEquals(0, assetDao.selectAll(null).size());
}
}
Мой Дао:

Код: Выделить всё

@Repository("assetDao")
public class AssetDao {

@Autowired
private JdbcTemplate jdbcTemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

public void deleteByPk (AssetKey assetKey, Connection con) throws DataAccessException {

jdbcTemplate.update("DELETE FROM Asset WHERE id = ? ", assetKey.getId());
}
}
Мой класс контроллера:

Код: Выделить всё

@Controller
public class AssetApiController implements AssetApi {

private static final Logger log = LoggerFactory.getLogger(AssetApiController.class);

private final ObjectMapper objectMapper;

private final HttpServletRequest request;

@Autowired
private AssetDao assetDao;

@org.springframework.beans.factory.annotation.Autowired
public AssetApiController(ObjectMapper objectMapper, HttpServletRequest request) {
this.objectMapper = objectMapper;
this.request = request;
}

@Override
public ResponseEntity delete(@RequestBody AssetKey assetKey) {
try{
assetDao.deleteByPk(assetKey, null);
} catch (ApplicationException e) {
log.warn(e.getFormattedMessage(), e);
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity(HttpStatus.OK);
}

}
Моя конфигурация JacksonConfig:

Код: Выделить всё

@Configuration
public class JacksonConfiguration {

@Bean
@ConditionalOnMissingBean(ThreeTenModule.class)
ThreeTenModule threeTenModule() {
ThreeTenModule module = new ThreeTenModule();
module.addDeserializer(Instant.class, CustomInstantDeserializer.INSTANT);
module.addDeserializer(OffsetDateTime.class, CustomInstantDeserializer.OFFSET_DATE_TIME);
module.addDeserializer(ZonedDateTime.class, CustomInstantDeserializer.ZONED_DATE_TIME);
return module;
}

}
Еще два момента, которые могут помочь диагностировать это:
  • Я последовал этому ответу: https://stackoverflow.com/a/32842962/11853066. И это устранило проблему, но затем я получил эквивалентную ошибку для HttpServletRequest: не найден соответствующий bean-компонент для зависимости [javax.servlet.http.HttpServletRequest]. Таким образом, основная проблема не была решена.
  • Когда я пытаюсь создать тесты для объекта, отличного от актива (например, «Поставщик» с поставщикомController, ПоставщикДао), я получаю ту же ошибку: Ошибка создания bean-компонента с именем «assetApiController», определенным в файле. Должно быть, это связано с тем, что assetsApiController является первым контроллером, который сканируется в алфавитном порядке?


Подробнее здесь: https://stackoverflow.com/questions/650 ... son-databi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»