如何在支柱 2 中返回 JSON 数组

How to return JSON array in Struts 2

本文关键字:返回 JSON 数组      更新时间:2023-09-26

这是我的支柱动作

@Action("/trylogin")
@ParentPackage("json-default")
@Result(type = "json", params = { "includeProperties", "msg, productsList" })
public class Login extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private String utilisateur;
    private String motdepasse;
    private String msg;
    private ArrayList<Article> productsList = new ArrayList<Article>();
    @Autowired
    private Dao dao;
    public String execute() {
        if (dao.validCredentials(utilisateur, motdepasse)) {
            System.out.println("USER FOUND");
            productsList = dao.fetchProducts();
            msg = "success";
        } else {
            System.out.println("ERREUR");
            msg = "error";
        }
        return ActionSupport.SUCCESS;
    }
public ArrayList<Article> getProductsList() {
    return productsList;
}
public String getMsg() {
    return msg;
}

这是我的 ajax 帖子:

$.post({
    url: "trylogin",                        
    data: {                                 
        utilisateur: name,
        motdepasse: password
    }       
}).done(function(data) {                
    console.log(data.productsList.length);
}).fail(function( jqXHR, textStatus ) {     
    console.log("Fail");
})

我想获取我的产品列表。在我的操作中,列表已正确加载。但是一旦我console.log(data.productsList)它就是空的。

我应该怎么做才能将产品列表从我的支柱操作获取到我的 JavaScript ?

我的产品列表是一个对象列表,具有各种属性,如名称/ID/颜色...

参数includeProperties是正则表达式的列表。当您使用参数productsList时,json 序列化程序只会找到此属性,但是当进一步解析它的元素时,不包含任何元素。如果将此参数与结果一起使用,则 json 输出中仅包含与表达式匹配的属性。

您需要在 json 结果中配置includeProperties。例如

@Result(type="json", params = {"includeProperties", "msg,
  productsList''[''d+'']''.id,productsList''[''d+'']''.name,productsList''[''d+'']''.color"}) 

请注意,特殊字符是双重转义的。

您需要

在允许的属性的白名单中列出Article的每个属性。

假设文章具有 idnamecolor 属性,配置将为:

@Result(type = "json", params = { "includeProperties", 
                                  "msg, 
                                   productsList''[''d+'']''.id,
                                   productsList''[''d+'']''.name,
                                   productsList''[''d+'']''.color"})

这就是为什么我更喜欢使用 root 对象而不是 includeProperties ,即使在您的情况下,您需要找到一种处理msg的方法(这可能是基于列表结果的客户端组合,不过)。