相关疑难解决方法(0)

JSON以自定义格式序列化日期(无法从String值构造java.util.Date的实例)

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)

json spring-mvc jackson fasterxml

27
推荐指数
2
解决办法
6万
查看次数

Jackson @JsonFormat将日期缩短了一天

我在我的项目中使用了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)

谢谢

format json jackson spring-data-rest spring-boot

20
推荐指数
3
解决办法
2万
查看次数

如何在Spring Boot Jackson Date序列化中应用默认时区

我已将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)

spring spring-mvc jackson spring-boot jackson2

17
推荐指数
4
解决办法
3万
查看次数

JPA 保存后 MySQL 日期更改为昨天的日期

我在使用 Spring 的 JpaRepository 将实体保存到 MySQL 时遇到了日期字段/数据库列的问题。

该实体具有 LocalDate 字段。使用 LocalDate.now() 测试时,遇到返回日期字段的问题:

  1. 首先保存返回对象的日期是否正确。
  2. 当从 MySQL 数据库返回对象时,日期是前一天

例子:

预计: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)

java mysql hibernate spring-data-jpa

8
推荐指数
3
解决办法
8594
查看次数