타임 스탬프없이 날짜를 저장하므로 스프링 부트 레스트 컨트롤러에서 날짜를받는 방식을 표준화하여 서비스를 제공 할 수 있습니다. 세계 어디서나 배포 할 수 있습니다 (AWS EC2 등). 스프링 부트 + 잭슨 - 항상 날짜를 UTC로 변환
내가 도움이되지 않았다, 다음 속성을 설정하려고 :spring.jackson.time-zone=UTC
항상 true
또 다른 재산이있다, 그래서 설정하지 않은, 즉 :
spring.jackson.deserialization.adjust-dates-to-context-time-zone=true
저는 2 개의 별도 우분투 컨테이너로 배포하고 있습니다. 하나는 UTC
시간대이고 다른 하나는 현재 시간대 (GMT -3)입니다. 현재 시간대는 America/Sao_Paulo
입니다.
예 페이 : 서비스가 상파울루에 배치되면
{"date":"2017-09-15T18:58:00.000Z"}
그것이 수신 : 올바른이다
2017-09-15 18:58:00.000000
. 서비스가 UTC에 배포하는 경우
, 그것은 수신 : 잘못된입니다2017-09-15 15:58:00.000000
.
Java에서 날짜 정보를 LocalDateTime
과 함께 저장하고 있습니다.
예 모델 :
import java.time.LocalDateTime;
class Model {
private LocalDateTime date;
public LocalDateTime getDate() {
return date;
}
public void setDate(LocalDateTime date) {
this.date = date;
}
}
예 자원 :
@RestController
class Resource {
@RequestMapping(consumes = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<?> add(@RequestBody Model model) {
System.out.println(model.getDate());
// persistence ommited
return ResponseEntity.created(URI.create("")).build();
}
}
내가 내 모든 생산 기계의 시간대를 변경할 수 없습니다, 나는 잭슨과 자바 (가능한 경우)와 함께이 문제를 해결해야합니다.
또 다른 제한 사항 : 내 모델 클래스에 주석을 달아서는 안됩니다.
내 pom.xml
(관련 부분)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
</parent>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.8.5</version>
</dependency>
시도했지만 문제가 지속됩니다. 서버간에 3 시간 차이가 있습니다 (이는 UTC와 제 시간대의 차이입니다). –
이 트릭을 사용하면 수신 한 모든 날짜를 UTC로 강제 변환하므로 수신 된 날짜를 데이터베이스에 저장할 준비가됩니다. 내 시스템에서 LocalDateTime을 사용하고 있지 않지만 Date 및 java.sql.Timestamp를 사용하고 있습니다. – desoss
귀하의 답변은 실제로 작동하지만 문제는 데이터베이스 구성입니다. 감사. –