@JsonFormat()不起做用

    打算將數據庫取出的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>
相關文章
相關標籤/搜索