Отображение DTO в Entity с ModelMapper, включая исключения - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть DTO (OpeningHoursPeriodDTO) и Entity (OpeningHoursPeriod), которые я хочу отобразить с помощью ModelMapper.Пока я не выкидываю исключения в методе конвертера, все работает нормально, как и ожидалось.

Вот код конвертера:

modelMapper
        .createTypeMap(OpeningHoursPeriodDTO.class, OpeningHoursPeriod.class)
        .setConverter(converter -> {
            OpeningHoursPeriodDTO openingHoursPeriodDTO = converter.getSource();
            if (openingHoursPeriodDTO == null) {
                return null;
            }

            if (openingHoursPeriodDTO.getOpen() == null || openingHoursPeriodDTO.getClose() == null) {
                throw new BadRequestException("Opening hours and closing hours must be present");
            }

            if (!Objects.equals(
                    openingHoursPeriodDTO.getOpen().getDay(),
                    openingHoursPeriodDTO.getClose().getDay())) {
                throw new BadRequestException("Opening and close day for a period must be for the same day");
            }

            return OpeningHoursPeriod.builder()
                    .id(openingHoursPeriodDTO.getId())
                    .day(openingHoursPeriodDTO.getOpen().getDay())
                    .openTime(LocalTime.parse(openingHoursPeriodDTO.getOpen().getTime(), TIME_FORMATTER))
                    .closeTime(LocalTime.parse(openingHoursPeriodDTO.getClose().getTime(), TIME_FORMATTER))
                    .build();
        });

Проблема в том, что, если случится, выдает исключение, Я получаю код состояния 500 в моем приложении Spring Boot, хотя код состояния BadRequestException должен быть 400. Любая идея, как лучше обрабатывать такие исключения преобразователя?

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете добавить @ResponseStatus к своему исключению:

@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public class BadRequestException extends RuntimeException {
}

Это сгенерирует 400, когда выбрасывается это исключение.

Но есть различные другие опции для обработки исключений в контроллерах REST.,Посмотрите здесь:

https://www.baeldung.com/exception-handling-for-rest-with-spring

...