【问题标题】:how to get the correct date format in Json using Java and MySql如何使用 Java 和 MySql 在 Json 中获取正确的日期格式
【发布时间】:2018-11-11 03:54:37
【问题描述】:

我正在将 Java spring MVC 与 MySql 数据库一起使用,并且我正在尝试使用 REST api。
问题出在日期字段上,这是我的模型:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "patient_mesure")
@JsonAutoDetect
public class PatientMesure {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name = "mesure_patient")
    private float mesure_patient;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "mesure", nullable = false)
    private Mesure mesure;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "patient", nullable = false)
    private Personne patient;
    @Column(name = "date")
    private Date date;
    @Column(name = "inserted", nullable = false)
    private Date inserted;
    @Column(name = "updated", nullable = false)
    private Date updated;

    // getters and setters
}

这是我的休息控制器:

import com.eheio.spring.models.PatientMesure;
import com.eheio.spring.models.Personne;
import com.eheio.spring.services.PatientMesureService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

@RestController
public class PatientMesureRestController {

    private PatientMesureService patientMesureService;

    @Autowired
    public void setPatientMesureService(PatientMesureService patientMesureService) {
        this.patientMesureService = patientMesureService;
    }

    @GetMapping(value = "/getAllMesures")
    public List<PatientMesure> listAllUsers(HttpServletRequest httpServletRequest) {
        HttpSession httpSession = httpServletRequest.getSession(true);
        Personne personne = (Personne) httpSession.getAttribute("personne");
        return patientMesureService.findMesuresByPatient(personne.getId());
    }
}

我得到的结果:

{ id: 1, date: 1527801252000, inserted: 1527801252000, mesure_patient: 50, updated: 1527801252000}

如何获得日期字段的正确格式?类似2018-05-31 21:14:12

【问题讨论】:

    标签: java mysql json spring jackson


    【解决方案1】:

    设置一个自定义 JsonSerialize 并在那里格式化,SimpleDateFormat 这样:

    首先创建 JsonDateSerializer 类:

    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import org.codehaus.jackson.JsonGenerator;
    import org.codehaus.jackson.JsonProcessingException;
    import org.codehaus.jackson.map.JsonSerializer;
    import org.codehaus.jackson.map.SerializerProvider;
    import org.springframework.stereotype.Component;
    
    @Component
    public class JsonDateSerializer extends JsonSerializer<Date>{
        private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    
        @Override
        public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
        throws IOException, JsonProcessingException {
            String formattedDate = dateFormat.format(date);
            gen.writeString(formattedDate);
        }
    }
    

    然后在你的getter方法中:

    @JsonSerialize(using=JsonDateSerializer.class)
    public Date getDate() {
        return date;
    }
    

    另外,您使用的是 Java 8,DateTimeFormatter 是线程安全的(正如@Philippe Marschall 指出的那样):

    private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
    

    【讨论】:

    • 你不应该使用静态SimpleDateFormat 它们不是线程安全的。
    【解决方案2】:

    你可以像下面这样使用

    import com.fasterxml.jackson.annotation.JsonFormat;
    
    
        @JsonFormat(shape = JsonFormat.Shape.STRING,  pattern = "yyyy-MM-dd HH:mm:ss.SS a")
        @Column(name = "date")
        private Date date;
    
        @JsonFormat(shape = JsonFormat.Shape.STRING,  pattern = "yyyy-MM-dd HH:mm:ss.SS a")
        @Column(name = "inserted", nullable = false)
        private Date inserted;
    
        @JsonFormat(shape = JsonFormat.Shape.STRING,  pattern = "yyyy-MM-dd HH:mm:ss.SS a")
        @Column(name = "updated", nullable = false)
        private Date updated;
    

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 2012-02-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多