2012-08-28 4 views
0

JPA Entity 클래스 인 AssetOrder가 있습니다. 그리고 제품이라는 다른 엔티티에 대한 사용자 정의 JSONSerializer를 정의했습니다.이 엔티티는 AssetOrder 엔티티가 내부적으로 제품의 productID를 매핑하는 데 사용됩니다. AssetOrder에는 Date 객체를 포맷하기위한 JSONSerializer도 있습니다. Date 객체 JSON 직렬화가 완벽하게 작동합니다. 그러나 제품의 JSONSerializer가 완벽하게 작동하는지 확신 할 수 없습니다. JPA DAO에서 AssetOrder 객체를 검색하고 클라이언트 페이지에 표시하려고하면 Response에 잘못된 JSON 데이터가 포함되어 있습니다. AssetOrder.java, Product.java 및 JSONProductSerializer.java의 세 가지 Java 클래스를 동봉했습니다. 내가 잘못한 곳에서 도와주세요. 감사합니다. .JPA Entity, JSON serialization

//===================== AssetOrder.java ============================ 


package my.pkg; 

import java.util.Date; 

import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 

import com.fasterxml.jackson.annotation.JsonAutoDetect; 
import com.fasterxml.jackson.databind.annotation.JsonSerialize; 

@JsonAutoDetect 
@Entity 
public class AssetOrder { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long orderId; 
    private String orderRequesterSignum; 
    private String orderOwnerSignum; 

    @JoinColumn(name = "productID") 
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    private Product product; 

    //private String productId; 
    private int duartion; 
    private String processInstanceUUID; 
    private Date orderDate; 
    private Date orderDeliveryDate; 
    private Date modifiedDate; 
    private String status; 
    private String comments; 

    public Long getOrderId() { 
     return orderId; 
    } 
    public void setOrderId(Long orderId) { 
     this.orderId = orderId; 
    } 
    public String getOrderRequesterSignum() { 
     return orderRequesterSignum; 
    } 
    public void setOrderRequesterSignum(String orderRequesterSignum) { 
     this.orderRequesterSignum = orderRequesterSignum; 
    } 
    public String getOrderOwnerSignum() { 
     return orderOwnerSignum; 
    } 
    public void setOrderOwnerSignum(String orderOwnerSignum) { 
     this.orderOwnerSignum = orderOwnerSignum; 
    } 
    public int getDuartion() { 
     return duartion; 
    } 
    public void setDuartion(int duartion) { 
     this.duartion = duartion; 
    } 
    public String getProcessInstanceUUID() { 
     return processInstanceUUID; 
    } 
    public void setProcessInstanceUUID(String processInstanceUUID) { 
     this.processInstanceUUID = processInstanceUUID; 
    } 

    @JsonSerialize(using=JsonDateSerializer.class) 
    public Date getOrderDate() { 
     return orderDate; 
    } 
    public void setOrderDate(Date orderDate) { 
     this.orderDate = orderDate; 
    } 

    @JsonSerialize(using=JsonDateSerializer.class) 
    public Date getOrderDeliveryDate() { 
     return orderDeliveryDate; 
    } 
    public void setOrderDeliveryDate(Date orderDeliveryDate) { 
     this.orderDeliveryDate = orderDeliveryDate; 
    } 

    @JsonSerialize(using=JsonDateSerializer.class) 
    public Date getModifiedDate() { 
     return modifiedDate; 
    } 
    public void setModifiedDate(Date modifiedDate) { 
     this.modifiedDate = modifiedDate; 
    } 

    public String getStatus() { 
     return status; 
    } 
    public void setStatus(String status) { 
     this.status = status; 
    } 
    public String getComments() { 
     return comments; 
    } 
    public void setComments(String comments) { 
     this.comments = comments; 
    } 

    @JsonSerialize(using=JsonProductSerializer.class) 
    public Product getProduct() { 
     return product; 
    } 
    public void setProduct(Product product) { 
     this.product = product; 
    } 
} 

//============================Product.java========================= 
package my.pkg; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

@Entity 
public class Product { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long productID; 
    private String productName; 
    private String productCategory; 
    private String productDesc; 
    private Long productOwnerId; 
    private Long productHierarchyId; 
    private String productProcessID; 
    private Long productGroupID; 

    public Long getProductID() { 
     return productID; 
    } 
    public void setProductID(Long productID) { 
     this.productID = productID; 
    } 
    public String getProductName() { 
     return productName; 
    } 
    public void setProductName(String productName) { 
     this.productName = productName; 
    } 
    public String getProductCategory() { 
     return productCategory; 
    } 
    public void setProductCategory(String productCategory) { 
     this.productCategory = productCategory; 
    } 
    public String getProductDesc() { 
     return productDesc; 
    } 
    public void setProductDesc(String productDesc) { 
     this.productDesc = productDesc; 
    } 
    public Long getProductOwnerId() { 
     return productOwnerId; 
    } 
    public void setProductOwnerId(Long productOwnerId) { 
     this.productOwnerId = productOwnerId; 
    } 
    public Long getProductHierarchyId() { 
     return productHierarchyId; 
    } 
    public void setProductHierarchyId(Long productHierarchyId) { 
     this.productHierarchyId = productHierarchyId; 
    } 
    public String getProductProcessID() { 
     return productProcessID; 
    } 
    public void setProductProcessID(String productProcessID) { 
     this.productProcessID = productProcessID; 
    } 
    public Long getProductGroupID() { 
     return productGroupID; 
    } 
    public void setProductGroupID(Long productGroupID) { 
     this.productGroupID = productGroupID; 
    } 
} 

//=================JSONProductSerializer.java========================= 
//the commented part in the below code didn't work either 
//===================================================================== 
package my.pkg; 


import java.io.IOException; 

import org.springframework.stereotype.Component; 

import com.fasterxml.jackson.core.JsonGenerator; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.JsonSerializer; 
import com.fasterxml.jackson.databind.SerializerProvider; 

/** 
* Used to serialize com.ericsson.egi.sxs.persistence.entity.Product, which is not a common JSON 
* type, so we have to create a custom serialize method;. 
* 
* source: google.com 
*/ 
@Component 
public class JsonProductSerializer extends JsonSerializer<Product>{ 

    @Override 
    public void serialize(Product product, JsonGenerator gen, SerializerProvider provider) 
      throws IOException, JsonProcessingException { 

     synchronized(product) { 
      /*gen.writeStartObject(); 
      gen.writeNumberField("productID", product.getProductID()); 
      gen.writeStringField("productName", product.getProductName()); 
      gen.writeStringField("productCategory", product.getProductCategory()); 
      gen.writeStringField("productDesc", product.getProductDesc()); 
      gen.writeNumberField("productOwnerId", product.getProductOwnerId()); 
      gen.writeNumberField("productHierarchyId", product.getProductHierarchyId()); 
      gen.writeStringField("productProcessID", product.getProductProcessID()); 
      gen.writeNumberField("productGroupID", product.getProductGroupID()); 
      gen.writeEndObject();*/ 
      gen.writeNumber(product.getProductID()); 
      gen.writeString(product.getProductName()); 
      gen.writeString(product.getProductCategory()); 
      gen.writeString(product.getProductDesc()); 
      gen.writeNumber(product.getProductOwnerId()); 
      gen.writeNumber(product.getProductHierarchyId()); 
      gen.writeString(product.getProductProcessID()); 
      gen.writeNumber(product.getProductGroupID()); 
     } 
    } 

} 

답변

0

사실, 문제는 패키지 com.fasterxml.jackson (잭슨의 최신 버전)와 java.util.Date 직렬화와 함께 밝혀졌다. 나는 org.codehaus.jackson으로 되돌아 갔고 모든 것이 매력처럼 작동합니다.

관련 문제