如何使用Java和MySql在Json中获得正确的日期格式

如何使用Java和MySql在Json中获得正确的日期格式,java,mysql,json,spring,jackson,Java,Mysql,Json,Spring,Jackson,我正在使用JavaSpringMVC和MySql数据库,并尝试使用RESTAPI。 问题在于日期字段,这是我的模型: import com.fasterxml.jackson.annotation.JsonAutoDetect; import javax.persistence.*; import java.util.Date; @Entity @Table(name = "patient_mesure") @JsonAutoDetect public class PatientMesure

我正在使用JavaSpringMVC和MySql数据库,并尝试使用RESTAPI。
问题在于日期字段,这是我的模型:

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
}
这是我的Rest控制器:

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());
    }
}

如何获取日期字段的正确表单?类似于
2018-05-31 21:14:12

设置自定义JsonSerialize并将其格式化,方法如下:

首先创建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);
    }
}
另外,您正在使用Java 8,这是线程安全的(正如@Philippe Marschall指出的):


你可以像下面这样使用

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;

您不应该使用static
simpleDataFormat
它们不是线程安全的。
@JsonSerialize(using=JsonDateSerializer.class)
public Date getDate() {
    return date;
}
private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
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;