Java Struts 2中的Json插件存在问题

Java Struts 2中的Json插件存在问题,java,ajax,json,struts2,Java,Ajax,Json,Struts2,我有下面的代码,我希望实现/getJson将用户对象作为json返回,/getJson2将用户2作为json对象返回的功能 @ParentPackage("json-default") public class JsonAction extends ActionSupport{ private User user = new User("John","Smith"); private User user2 = new User("Smith","John"); public String p

我有下面的代码,我希望实现/getJson将用户对象作为json返回,/getJson2将用户2作为json对象返回的功能

@ParentPackage("json-default")
public class JsonAction extends ActionSupport{
private User user = new User("John","Smith"); 
private User user2 = new User("Smith","John"); 
public String populate(){

    return "populate";
}

@Action(value="/getJson", results = {
        @Result(name="success", type="json")})
public String test(){
    return "success";
}

@Action(value="/getJson2", results = {
        @Result(name="success", type="json")})
public String test2(){
    return "success";
}

@JSON(name="user")
public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

@JSON(name="user2")
public User getUser2() {
    return user2;
}

public void setUser2(User user2) {
    this.user2 = user2;
}
}
目前,无论我调用哪种方法,我仍然会得到以下结果:

{"user":{"firstName":"John","lastName":"Smith"},"user2":{"firstName":"Smith","lastName":"John"}}
可能吗

更新:

我修改了代码:

public class JsonAction extends ActionSupport{
private User user = new User("John","Smith"); 
private User user2 = new User("Smith","John"); 
public String populate(){

    return "populate";
}

@Action(value="/getJson", results = {
        @Result(name="success", type="json",params = {
                "includeProperties",
                "user"})})
public String test(){
    return "success";
}

@Action(value="/getJson2", results = {
        @Result(name="success", type="json",params = {
                "includeProperties",
                "user2"})})
public String test2(){
    return "success";
}

@JSON(name="user")
public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

@JSON(name="user2")
public User getUser2() {
    return user2;
}

public void setUser2(User user2) {
    this.user2 = user2;
}
}
现在我开始

{"user":{}}


此操作提供两个属性:user和user2


如果/getJson和/getJson2都映射到此操作类,那么它们都将使用可用属性:user和user2进行响应。

是的。如果可能,解决方案需要使用include/exclude参数

下面是一个例子

方法getJson1和getJson2显示includeParameters,而getJson3显示excludeParameters

注意:尽管示例使用字符串作为include/exclude参数的参数,但字符串被解释为正则表达式。所以我可以将action3中的“string1,string2”替换为“string*”

有关更多信息,请参阅:

../getJson1返回{“string1”:“One”}

../getJson2返回{“string2”:“Two”}


../getJson3返回{“其他”:“其他”}

您必须包括所有要序列化的属性。这包括如下用户类的属性,例如:

@Action(value="/getJson", results = {
        @Result(name="success", type="json",params = {
                "includeProperties",
                "user\.firstName, user\.lastName"})})
但是,获得这项工作的另一种形式可能是使用正则表达式:

@Action(value="/getJson", results = {
        @Result(name="success", type="json",params = {
                "includeProperties",
                "user\..*"})})

您好。

您好,我根据您的示例修改了代码,但现在得到的是空JSON字符串,请参阅更新。先谢谢你,我看不出有什么问题。此时,我将删除setter(我不知道您是否有任何可能导致奇怪的spring魔法),将用户创建移动到prepare方法中,并验证用户不是null(请参阅),这只是个人偏好,而是@JSON(name=“User”)当应用到getUser时,它是冗余的,因此我将去掉getter上的@JSON注释。
@Action(value="/getJson", results = {
        @Result(name="success", type="json",params = {
                "includeProperties",
                "user\.firstName, user\.lastName"})})
@Action(value="/getJson", results = {
        @Result(name="success", type="json",params = {
                "includeProperties",
                "user\..*"})})