could not read JSON: Can not construct instance of java.util.Date from String
value '2012-07-21 12:11:12': not a valid representation("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
Run Code Online (Sandbox Code Playgroud)
将json请求传递给POJO类中的REST控制器方法.用户应该只输入以下日期时间格式,否则它应该抛出message.why DateSerializer没有调用?
add(@Valid @RequestBody User user)
{
}
Run Code Online (Sandbox Code Playgroud)
JSON:
{
"name":"ssss",
"created_date": "2012-07-21 12:11:12"
}
Run Code Online (Sandbox Code Playgroud)
pojo类变量
@JsonSerialize(using=DateSerializer.class)
@Column
@NotNull(message="Please enter a date")
@Temporal(value=TemporalType.TIMESTAMP)
private Date created_date;
public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
logger.info("serialize:"+value);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info("DateSerializer formatter:"+formatter.format(value));
jgen.writeString(formatter.format(value));
}
Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用了Spring Date Rest with Spring Boot.这个项目有一个对象,我使用注释@JsonFormat格式化将从我的Json接收的日期字段.字段Date的格式为"dd/MM/yyyy".当我发送我的json值"08/07/1980"时,杰克逊转换为值"07/07/1980".
问题是@JsonFormat将日期设置为少一天
这是我的源代码
@Temporal(TemporalType.DATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy", locale = "pt-BR", timezone = "UTC")
private Date birthDate;
Run Code Online (Sandbox Code Playgroud)
谢谢
我已将Spring Boot应用程序配置为将日期序列化为ISO8601字符串:
spring:
jackson:
serialization:
write-dates-as-timestamps: false
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
"someDate": "2017-09-11T07:53:27.000+0000"
Run Code Online (Sandbox Code Playgroud)
不过我的时区是欧洲/马德里.事实上,如果我打印TimeZone.getDefault()这是我得到的.
如何让杰克逊使用实际时区序列化这些日期时间值?GMT + 2
"someDate": "2017-09-11T09:53:27.000+0200"
Run Code Online (Sandbox Code Playgroud) 该实体具有 LocalDate 字段。使用 LocalDate.now() 测试时,遇到返回日期字段的问题:
例子:
预计:2019-01-29
实际 :2019-01-28
我昨天试过了,结果是:
预计:2019-01-28
实际 :2019-01-27
也许类似于this JPA Saving wrong date in MySQL database
应用程序-mysql-test-connection.properties
spring.jpa.hibernate.ddl-auto=create
# Database url
spring.datasource.url=jdbc:mysql://localhost:3306/test_coupon_system?serverTimezone=UTC
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
# Test Database credentials
spring.datasource.username=springuser
spring.datasource.password=springuser
### showing values - for development
spring.jpa.show-sql=true
Run Code Online (Sandbox Code Playgroud)
为简洁起见,优惠券删除了构造函数和 getter/setter
@Entity
public class Coupon {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", length = 45)
private long id;
@Column(name = "name", unique = …Run Code Online (Sandbox Code Playgroud)