我有以下(完整)实体类。
public class StateTable implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "state_id", nullable = false)
private Long stateId;
@Column(name = "state_name", length = 45)
private String stateName;
@OneToMany(mappedBy = "stateId", fetch = FetchType.LAZY)
private Set<UserTable> userTableSet;
@OneToMany(mappedBy = "stateId", fetch = FetchType.LAZY)
private Set<City> citySet;
@OneToMany(mappedBy = "stateId", fetch = FetchType.LAZY)
private Set<Inquiry> inquirySet;
@OneToMany(mappedBy = "shippingState", fetch = FetchType.LAZY)
private Set<OrderTable> orderTableSet;
@OneToMany(mappedBy = "paymentState", fetch = FetchType.LAZY)
private Set<OrderTable> orderTableSet1;
@JoinColumn(name = "country_id", referencedColumnName = "country_id")
@ManyToOne(fetch = FetchType.LAZY)
private Country countryId;
public StateTable() {
}
public StateTable(Long stateId) {
this.stateId = stateId;
}
public Long getStateId() {
return stateId;
}
public void setStateId(Long stateId) {
this.stateId = stateId;
}
public String getStateName() {
return stateName;
}
public void setStateName(String stateName) {
this.stateName = stateName;
}
@XmlTransient
public Set<UserTable> getUserTableSet() {
return userTableSet;
}
public void setUserTableSet(Set<UserTable> userTableSet) {
this.userTableSet = userTableSet;
}
@XmlTransient
public Set<City> getCitySet() {
return citySet;
}
public void setCitySet(Set<City> citySet) {
this.citySet = citySet;
}
@XmlTransient
public Set<Inquiry> getInquirySet() {
return inquirySet;
}
public void setInquirySet(Set<Inquiry> inquirySet) {
this.inquirySet = inquirySet;
}
@XmlTransient
public Set<OrderTable> getOrderTableSet() {
return orderTableSet;
}
public void setOrderTableSet(Set<OrderTable> orderTableSet) {
this.orderTableSet = orderTableSet;
}
@XmlTransient
public Set<OrderTable> getOrderTableSet1() {
return orderTableSet1;
}
public void setOrderTableSet1(Set<OrderTable> orderTableSet1) {
this.orderTableSet1 = orderTableSet1;
}
public Country getCountryId() {
return countryId;
}
public void setCountryId(Country countryId) {
this.countryId = countryId;
}
@Override
public int hashCode() {
int hash = 0;
hash += (stateId != null ? stateId.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof StateTable)) {
return false;
}
StateTable other = (StateTable) object;
if ((this.stateId == null && other.stateId != null) || (this.stateId != null && !this.stateId.equals(other.stateId))) {
return false;
}
return true;
}
@Override
public String toString() {
return "model.StateTable[ stateId=" + stateId + " ]";
}
}
我仅需要此类中的两个属性作为JSON响应,即stateId
和stateName
。其余属性必须被JSON处理/序列化时忽略。
我尝试json.excludeProperties
将json
拦截器设置如下。
@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value="json-default")
public final class StateListAction extends ActionSupport implements Serializable, ValidationAware
{
@Autowired
private final transient SharableService sharableService=null;
private static final long serialVersionUID = 1L;
private Long id;
List<StateTable>stateTables=new ArrayList<StateTable>();
public StateListAction() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@JSON(name="stateTables")
public List<StateTable> getStateTables() {
return stateTables;
}
public void setStateTables(List<StateTable> stateTables) {
this.stateTables = stateTables;
}
@Action(value = "PopulateStateList",
results = {
@Result(type="json", name=ActionSupport.SUCCESS, params={"json.enableSMD", "true", "json.enableGZIP", "true", "json.excludeNullProperties", "true", "json.root", "stateTables", "json.excludeProperties", "userTableSet, citySet, inquirySet, orderTableSet, orderTableSet1, countryId", "validation.validateAnnotatedMethodOnly", "true"})})
public String populateStateList() throws Exception
{
System.out.println("countryId = "+id);
stateTables=sharableService.findStatesByCountryId(id);
return ActionSupport.SUCCESS;
}
}
完成此操作后,其余属性预计将被忽略,但似乎不起作用。生成了与所有实体类相关联的SQL语句的数量,这又导致发生其他严重错误,例如,
org.apache.struts2.json.JSONException: java.lang.IllegalAccessException: Class
org.apache.struts2.json.JSONWriter can not access a member of class
org.joda.time.tz.DateTimeZoneBuilder$PrecalculatedZone with modifiers "public"
我在这里想念什么?如何忽略除stateId
和以外的所有属性stateName
?
我正在使用Struts2-json-plugin-2.3.16。
您需要includeProperties
在json结果中进行配置。例如
@Result(type="json", params = {"contentType", "text/javascript", "includeProperties",
"stateTables\\[\\d+\\]\\.stateId,stateTables\\[\\d+\\]\\.stateName"})
问题内容: 我已经创建了下面的对象,该对象将被映射到ElasticSearch类型。我想从索引中排除该属性: 问题答案: 您应该能够设置属性的值,如下所示:
我想从类型中排除一个单独的属性。我该怎么做呢? 比如我有 我想排除属性 以获得
问题内容: 我需要从json类型列中删除一些属性。 桌子: 现在,我需要从column中删除。 这样的东西会很好。但是使用临时表的方法也足够了。 问题答案: 更新 :对于9.5及更高版本,可以使用显式运算符(如果您有类型化的列,则可以使用强制类型转换来应用修改): 可以使用运算符从JSON对象(或数组)中删除键(或索引): 可以使用运算符从JSON层次结构的深层删除: 对于9.4,您可以使用原始答
主要内容:全局异常映射:Struts提供了一个更简单的方式来处理未捕获的异常,并将用户重定向到一个专门的错误页面。您可以轻松地Struts配置到不同的异常有不同的错误页面。 Struts的异常处理所使用的“exception”拦截容易。“exception”拦截器作为默认的栈的一部分,所以不必做任何额外的配置。它可为准备使用的盒。让我们看到了一个简单的Hello World示例进行一些修改在HelloWorldActio
问题内容: 我有一个JSON: 我试图删除所有以 “ umb_” 开头的属性。这在json.net中可能吗? 输出将是这样的: 使用删除我能够做到,但是不能一次全部完成。 有什么建议吗? 问题答案: 您可以先解析字符串: 更新 或: 更新#2 您可以在子句中指定更多条件: 要么 或任何您需要的。
在这个问题中,我遇到了与Struts 2相反的问题:仅从defaultStack截取器中排除验证方法 上面的问题涉及到所有的方法都被排除在外,我的问题是没有任何方法被排除在外! 我正在尝试让authenticationInterceptor忽略LoginAction的showLogin方法: 但是,每次我转发到loginInitial时,拦截器都会抓取它,即使我的showLogin方法被排除在外。