打算將數據庫取出的Date類型的數據改爲必定格式的時間,如改爲yyyy-MM-dd。而後在屬性的get方法上加了@JsonFormat,結果取出時一直是long類型的Date,代碼以下:java
package soc.entity; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import com.fasterxml.jackson.annotation.JsonFormat; //@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) /*@XmlRootElement @XmlType(name = "user", propOrder = { "id", "name", "salary", "birthday"} )*/ public class User { private long id; private String name; @Min(value=6000,message="最低工資爲6000") @Max(value=25000,message="最高工資爲25000") private Double salary; private Date birthday; public User() { } public User(long id, String name, Double salary, String birthday) { super(); this.id = id; this.name = name; this.salary = salary; try { this.birthday = new SimpleDateFormat("yyyy-MM-dd").parse(birthday); } catch (ParseException e) { e.printStackTrace(); } } public User(String name, Double salary, String birthday) { super(); this.name = name; this.salary = salary; try { this.birthday = new SimpleDateFormat("yyyy-MM-dd").parse(birthday); } catch (ParseException e) { e.printStackTrace(); } } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } // @XmlJavaTypeAdapter(DateAdapter.class)//這種格式也能夠<birthday>2018-10-15 10:12:15</birthday> // @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//json的返回格式 @JsonFormat(pattern="yyyy/MM/dd HH:mm:ss",timezone = "GMT+8")//json的返回格式 public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public long getId() { return id; } public void setId(long id) { this.id = id; } @Override public String toString() { String birthdayS = (new SimpleDateFormat("yyyy-MM-dd")).format(birthday); return "User : id="+id+", Name="+name+", Salary="+salary+", Birthday="+birthdayS; } }
配置類以下:spring
package soc.config; import org.codehaus.jackson.jaxrs.JacksonJsonProvider; import org.glassfish.jersey.filter.LoggingFilter; //import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.spring.scope.RequestContextFilter; public class ApplicationApi extends ResourceConfig { public ApplicationApi() { // 註冊數據轉換器 register(JacksonJsonProvider.class); // 註冊日誌 register(LoggingFilter.class); // register application resources // register(UserResource.class); packages("soc.resource"); // register filters register(RequestContextFilter.class); // register mine exception class ,to find the trace of exception register(DebugMapperException.class); // register features // register(JacksonFeature.class); } }
通過一番查看,最後發現該配置類裏的JacksonJsonProvider是數據庫
org.codehaus.jackson.jaxrs.JacksonJsonProvider
而實體User類上的註解@JsonFormat則是json
com.fasterxml.jackson.annotation.JsonFormat
二者根本不是同一類型,將JacksonJsonProvider改爲app
com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider
則問題解決。
ide
綜上得出結論,用@JsonFormat註解時,json格式支持的jaxrs的實現類必須與該註解是同一個大類型,即fasterxml,jar包以下:this
<dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.5.4</version> </dependency>
若是json格式支持的jaxrs的實現類是codehaus,則@JsonFormat註解不起做用,即不能夠是以下jar包:spa
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-jaxrs</artifactId> <version>1.9.13</version> </dependency>