после установки свойства excludeProperties не существует узлов провинций и userinfos, результат приведен ниже:

я есть следующие классы:

public class Student {
    private Long id  ;
    private String firstName;
    private String lastName;
private Set<Enrollment> enroll = new HashSet<Enrollment>();
//Setters and getters
}

public class Enrollment {
    private Student student;
    private Course course;
    Long enrollId;

//Setters and Getters
}

У меня есть контроллер Struts2, и я хотел бы вернуть только сериализованный экземпляр класса Student.

@ParentPackage("json-default")
public class JsonAction extends ActionSupport{

private Student student;

@Autowired
DbService dbService;

public String populate(){
    return "populate";
}

@Action(value="/getJson", results = {
        @Result(name="success", type="json")})
public String test(){
    student =  dbService.getSudent(new Long(1));
    return "success";
}

@JSON(name="student")
public Student getStudent() {
    return student;
}
public void setStudent(Student student) {
    this.student = student;
}

}

Он возвращает мне сериализуемый объект студента со всеми подклассами, но я хотел бы, чтобы возвращался только объект студента без хэш-набора. Как я могу сказать Struts сериализовать только объект? У меня действительно включена отложенная загрузка, и хэшсет возвращается как прокси-класс.

Ответы на вопрос(2)

Решение Вопроса

который показывает использование свойств include и exclude. Я не думаю, что пример ясно показывает исключение вложенных объектов, однако я использовал его для этой цели. Если у вас все еще есть проблемы, я опубликую регулярное выражение, которое продемонстрирует это.

Проблема с плагином Json в Struts 2

редактироватьВот пример использования исключающих свойств в аннотации, которая блокирует сериализацию вложенного члена:

@ParentPackage("json-default")
@Result(type = "json", params = {
        "excludeProperties",
        "^inventoryHistory\\[\\d+\\]\\.intrnmst, selectedTransactionNames, transactionNames"
    })
public class InventoryHistoryAction extends ActionSupport {
...

инвентаризация имеет тип InventoryHistory объект сущности JPA, intrnmst ссылается на другую таблицу, но из-за отложенной загрузки, если она была сериализована, это вызвало бы исключение, когда действие сериализовано в JSON, по этой причине был добавлен параметр exclude, чтобы предотвратить это.

Обратите внимание, что

\\ 

требуется для каждого символа \, поэтому один символ \ будет использоваться только в xml, где требуется два из-за экранирования для правильного анализа строки.

 Quaternion27 янв. 2011 г., 00:53
Если посмотреть на ваше действие, вы пробовали следующее исключающее свойство "student.enroll", это предполагает, что у вас есть getEnroll.
 Quaternion26 янв. 2011 г., 21:27
О, черт, извини, я помню, как решал что-то похожее, но не проверял, не было ли это того же ОП. Я опубликую подобный стиль аннотации исключения регулярных выражений, чтобы восполнить это.
 danny.lesnik26 янв. 2011 г., 12:18
Да :) Это мой пост, но он не решит ни одной проблемы.
 user35918702 февр. 2012 г., 15:41
Знаете ли вы, как это можно сделать в struts.xml. Потому что я не использую аннотации в моем проекте.
    @Controller
    @Results({  
        @Result(name="json",type="json"
                , params={"root","outDataMap","excludeNullProperties","true"
                        ,"excludeProperties","^ret\\[\\d+\\]\\.city\\.province,^ret\\[\\d+\\]\\.enterprise\\.userinfos","enableGZIP","true"
                })
    })
    public class UserinfoAction extends BaseAction {
                @Action(value="login")

        public String login(){
            if(jsonQueryParam!=null && jsonQueryParam.length()>0)
            {
                user = JsonMapper.fromJson(jsonQueryParam, TUserinfo.class);
            }
            Assert.notNull(user);
             //RESULT="ret" addOutJsonData: put List<TUserinfo> into outDataMap with key RESULT for struts2 JSONResult  
            addOutJsonData(RESULT, service.login(user));
            return JSON;
        }



public class TUserinfo implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    private String userid;
    private String username;
    private String userpwd;
    private TEnterpriseinfo enterprise;
    private String telphone;
    private TCity city;
......
}

public class TEnterpriseinfo implements java.io.Serializable {
    private String enterpriseid;
    private String enterprisename;
    private Set<TUserinfo> userinfos = new HashSet<TUserinfo>(0);
.......}

    {"ret":[
    {
    "city":{"cityename":"tianjin","cityid":"12","cityname":"天津"
           ,"province": {"provinceename":"tianjing","provinceid":"02","provincename":"天津"}
      }
    ,"createddate":"2014-01-07T11:13:58"
    ,"enterprise":{"createddate":"2014-01-07T08:38:00","enterpriseid":"402880a5436a227501436a2277140000","enterprisename":"测试企业2","enterprisestate":0
              ,"userinfos":[null,{"city":{"cityename":"beijing","cityid":"11","cityname":"北京","province":{"provinceename":"beijing","provinceid":"01","provincename":"北京市"}
    },"comments":"ceshi","createddate":"2004-05-07T21:23:44","enterprise":null,"lastlogindate":"2014-01-08T08:50:34","logincount":11,"telphone":"2","userid":"402880a5436a215101436a2156e10000","username":"0.5833032879881197","userpwd":"12","userstate":1,"usertype":0}]
      }
,"lastlogindate":"2014-01-08T10:32:43","logincount":0,"telphone":"2","userid":"402880a5436ab13701436ab1b74a0000","username":"testUser","userpwd":"333","userstate":1,"usertype":0}]
    }

после установки свойства excludeProperties не существует узлов провинций и userinfos, результат приведен ниже:

{"ret":
    [{
    "city":{"cityename":"tianjin","cityid":"12","cityname":"天津"}
    ,"createddate":"2014-01-07T11:13:58"
    ,"enterprise":{"createddate":"2014-01-07T08:38:00","enterpriseid":"402880a5436a227501436a2277140000","enterprisename":"测试企业2","enterprisestate":0}
    ,"lastlogindate":"2014-01-08T11:05:32","logincount":0,"telphone":"2","userid":"402880a5436ab13701436ab1b74a0000","username":"testUser","userpwd":"333","userstate":1,"usertype":0
    }]
}

Ваш ответ на вопрос