Sql употребляют дату со дня до - PullRequest
0 голосов
/ 23 октября 2019

Итак, я пишу REST API, и один из моих объектов имеет тип java.util.Date;Моя конечная точка POST использует JSON-тип, что-то вроде этого:

{
   "authorId": 7845,
   "authorName": {
      "first": "Dan",
      "second": "Brown"
   },
   "birth": {
      "date": "1987-10-25",
      "country": "USA",
      "city": "New York"
   },
   "description": "Very good author!"
}

Также я переопределяю метод десериализации Джексона для обработки недопустимого формата даты и всего, что с этим связано:

public class CustomDateDeserializer extends StdDeserializer<LocalDate> {
    public CustomDateDeserializer() {
        this(null);
    }

    public CustomDateDeserializer(Class t) {
        super(t);
    }

    @Override
    public Date deserialize(JsonParser jp, DeserializationContext dc) throws IOException {
        String date = jp.getValueAsString();

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate parsed;

        try {
            parsed = LocalDate.parse(date, formatter);
        } catch (DateTimeParseException e) {
            throw new InvalidDateTypeException(jp.currentName(), jp.getText());
        }

        return parsed;
    }
}

В моей модели DTOЯ использую именно этот десериализатор для этого параметра:

@JsonFormat(pattern = "yyyy-MM-dd")
@JsonDeserialize(using = CustomDateDeserializer.class)
@PastOrPresent(message = "Value 'date' must be past or present!")
private LocalDate date;

При жизни всех моих промежуточных объектов (моделей и DTO) это значение везде выглядит так, как во входных данных JSON - 1987-10-25.

Контроллер:

@PostMapping(value = "/author/new", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> addNewAuthor(@RequestBody @Valid AuthorPostDto postAuthor) {
    AuthorPostDto response = authorService.addNewAuthor(postAuthor);
    return new ResponseEntity<>(response, HttpStatus.CREATED);
}

Метод обслуживания:

public AuthorPostDto addNewAuthor(AuthorPostDto author) {
    if (authorRepository.existsByAuthorId(author.getAuthorId())) {
        throw new AuthorAlreadyExistsException();
    }

    Author toPost = toModelMapper.mapAuthorDtoToAuthor(author);
    Author response = authorRepository.save(toPost);
    return toDtoMapper.mapAuthorModelToDto_POST(response);
}

Все объекты - postAuthor (проанализированный Джексоном в контроллере), toPost, ответ и возвращаемое значение из сервиса - содержит значение Date, как вinput JSON - 1987-10-25.

Но в SQL и в возвращаемом значении из контроллера появляется дата, указанная накануне: 1987-10-24 ...

Как это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...