【发布时间】:2014-11-01 01:26:56
【问题描述】:
这是对以下关于 JPA 瞬态注释的问题的跟进 Why does JPA have a @Transient annotation?
我有一个不想保留的瞬态变量,它标有瞬态注释。 但是,当我想从我的 rest 控制器生成 JSON 时,输出的 JSON 中没有这个瞬态变量。
POJO PublicationVO 很简单,没有花哨的属性,只有一些私有属性(持久化),带有 getter 和 setter 以及 1 个临时变量。
@RequestMapping(value = { "{publicationId}"}, method = RequestMethod.GET, produces = "application/json")
@ResponseBody public PublicationVO getPublicationDetailsJSON(@PathVariable(value = "publicationId") Integer publicationId) {
LOG.info("Entered getPublicationDetailsJSON - publicationId: " + publicationId);
//Call method to get the publicationVO based on publicationId
PublicationVO publicationVO = publicationServices.getPublicationByIdForRestCalls(publicationId);
LOG.info("publicationVO:{}", publicationVO);
LOG.info("Exiting getPublicationDetailsJSON");
return publicationVO;
}
PublicationVO如下
package com.trinity.domain.dao;
import java.util.Calendar;
import javax.persistence.Column;
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 javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonInclude;
@Entity
@Table(name = "publication")
public class PublicationVO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Integer id;
@Column(name = "publicationName", unique = false, nullable = false, length = 200)
private String publicationName;
@Column(name = "publicationSource", unique = false, nullable = false, length = 45)
private String publicationSource;
@Column(name = "dateAdded", unique = false, nullable = false)
private Calendar dateAdded;
@Transient
private float percentageProcessed;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPublicationName() {
return publicationName;
}
public void setPublicationName(String publicationName) {
this.publicationName = publicationName;
}
public String getPublicationSource() {
return publicationSource;
}
public void setPublicationSource(String publicationSource) {
this.publicationSource = publicationSource;
}
public Calendar getDateAdded() {
return dateAdded;
}
public void setDateAdded(Calendar dateAdded) {
this.dateAdded = dateAdded;
}
public float getPercentageProcessed() {
return percentageProcessed;
}
public void setPercentageProcessed(float percentageProcessed) {
this.percentageProcessed = percentageProcessed;
}
@Override
public String toString() {
return "PublicationVO [id=" + id + ", publicationName=" + publicationName + ", publicationSource=" + publicationSource + ", dateAdded=" + dateAdded
+ ", percentageProcessed=" + percentageProcessed + "]";
}
}
当我在日志中看到publishVO 的调试语句时,瞬态变量包含在输出中,但在我的客户端代码中,瞬态变量不包含在json 响应中。
非常感谢任何帮助。
谢谢你, 达米安
【问题讨论】:
-
您可以编辑您的问题并发布 PublicationVO 的代码吗?您未序列化的瞬态变量是否有适当的吸气剂?
-
@m4rtin - 我刚刚包含了 publicationVo 类。是的,瞬态变量有一个 getter 方法
-
我可以在您的问题中看到一些 Spring MVC 注释以及 Spring 标记,您能否确认 JSON 的序列化是由 Jackson 库完成的?
-
是的,很抱歉序列化是通过杰克逊完成的。如果是这种情况,我需要使字段非瞬态,我可以尝试找出一种解决方法,但希望有一种更清洁的方法
-
真正的 m4rtin 这是一个公平的观点。我会尝试手动添加数据库列,删除瞬态注释,看看它有什么不同并回复你
标签: java json spring rest jackson