【问题标题】:How can I wrap into a wrapper this JSON builded by a Spring MVC controller method?如何包装到由 Spring MVC 控制器方法构建的 JSON 的包装器?
【发布时间】:2016-04-13 16:31:37
【问题描述】:

我是 Spring MVC 的新手,这是我第一次生成 JSON。

所以我有以下情况:

我有这 2 个模型类:

1) 国家数据:

public class CountryData {

    private String label;
    private String subdataConcat;

    private ArrayList<CountryDataChild>  countryDataChildList;

    public CountryData(String label, String subdataConcat, ArrayList<CountryDataChild> countryDataChildList) {
        super();
        this.label = label;
        this.subdataConcat = subdataConcat;
        this.countryDataChildList = countryDataChildList;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public String getSubdataConcat() {
        return subdataConcat;
    }

    public void setSubdataConcat(String subdataConcat) {
        this.subdataConcat = subdataConcat;
    }

    public ArrayList<CountryDataChild> getCountryDataChildList() {
        return countryDataChildList;
    }

    public void setCountryDataChildList(ArrayList<CountryDataChild> countryDataChildList) {
        this.countryDataChildList = countryDataChildList;
    }

}

2) CountryDataChild:

public class CountryDataChild {

    private String label;
    private String code;

    public CountryDataChild(String label, String code) {
        super();
        this.label = label;
        this.code = code;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

}

最后进入一个控制器类,我有这个控制器方法,它生成一个包含 CountryData 信息的 JSON:

@RequestMapping(value="/getCountryData", method = RequestMethod.GET)
public @ResponseBody CountryData getShopInJSON() {

    ArrayList<CountryDataChild> countryDataChildList = new ArrayList<CountryDataChild>();

    CountryDataChild child1 = new CountryDataChild("Lazio", "lazio");
    CountryDataChild child2 = new CountryDataChild("Lombardia", "lombardia");

    countryDataChildList.add(child1);
    countryDataChildList.add(child2);

    CountryData countryData = new CountryData("Italia", "y", countryDataChildList);

    return countryData;

}

这很好用,当它执行时,生成这个 JSON 作为输出到我的浏览器:

{"label":"Italia","subdataConcat":"y","countryDataChildList":[{"label":"Lazio","code":"lazio"},{"label":"Lombardia","code":"lombardia"}]}

好的,唯一的问题是根据提供的规范,这个对象必须是:

 countrydata({"label":"Italia","subdataConcat":"y","countryDataChildList":[{"label":"Lazio","code":"lazio"},{"label":"Lombardia","code":"lombardia"}]})

所以基本上生成的 JSON 必须包含在 countrydata(...)

中

如何实现这个规范?我错过了什么?

【问题讨论】:

    标签: json spring-mvc


    【解决方案1】:

    看起来您正在尝试生成 JSONP 而不是普通的 JSON。使用 Spring MVC 执行此操作的一种方法是保持您的 Controller 原样,然后按照此处所述创建过滤器:https://patrickgrimard.com/2010/07/28/tutorial-implementing-a-servlet-filter-for-jsonp-callback-with-springs-delegatingfilterproxy/

    您可以将 JSON 包装在 countrydata 函数中,并将内容类型设置为 text/javascript。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2012-02-18
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多