【问题标题】:Json returning tree model in Spring from listJson从列表中返回Spring中的树模型
【发布时间】:2013-04-28 09:17:01
【问题描述】:

我对 JSON 有疑问。所以我从客户端获得了一个 user_id,我必须检查这个 user_id 中的组。

我从数据库中获取数据并将其放入列表中。 我在 xml 文件中有这个注释

<mvc:annotation-driven />

在输出中我必须返回(从服务器端到客户端),例如这种 JSON 的树格式:

{'courses':         
    [                 
        {'name':'Informatyka w gospodarce', 'id':'1', 'dates':                         
            [                                 
                {'id':'1', 'code':'bla1', 'name':'PN 13.15'},                                 
                {'id':'2', 'code':'bla2', 'name':'WT 11.15'},                                 
                {'id':'3', 'code':'bla3', 'name':'PT 19.55'},                         
            ]                 
        },                 
        {'name':'Inżynieria oprogramowania', 'id':'2', 'dates':                         
            [                                 
                {'id':'4', 'code':'bla4', 'name':'PN 13.15'},                                 
                {'id':'5', 'code':'bla5', 'name':'WT 11.15'},                                 
                {'id':'6', 'code':'bla6', 'name':'PT 19.55'},                         
            ]                 
        }         
    ] 
}

所以我的输出只有这个: {'课程':[]}

问题是:我应该改变什么,在这个例子的输出上? 也许我对 JSON 的理解不好?

类树(依赖): JsonKursy JsonGrupy JsonGrupyZajeciowe

现在这是一个使用 Jackson 的 POJO 类: JsonKursy

import java.util.List;

import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonSubTypes;

import com.project.Json.JsonGrupy;

@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
@JsonSubTypes({ @JsonSubTypes.Type(JsonGrupy.class) })
public class JsonKursy {
    private List<JsonGrupy> courses;

    public List<JsonGrupy> getCourses() {
        return courses;
    }

    public void setCourses(List<JsonGrupy> courses) {
        this.courses = courses;
    }
}

JsonGrupy

import java.util.List;

import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonSubTypes;

@JsonSubTypes({ @JsonSubTypes.Type(JsonGrupyZajeciowe.class) })
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
public class JsonGrupy {

    private String name;
    private int id;
    private List<JsonGrupyZajeciowe> dates;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<JsonGrupyZajeciowe> getDates() {
        return dates;
    }

    public void setDates(List<JsonGrupyZajeciowe> dates) {
        this.dates = dates;
    }
}

JsonGrupyZajeciowe

import org.codehaus.jackson.annotate.JsonAutoDetect;
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
public class JsonGrupyZajeciowe {

    private int id;
    private String code;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCode() {
        return code;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我的控制器返回 Json:

@RequestMapping(value = "/getcourses", method = RequestMethod.POST,  produces="application/json")
    public @ResponseBody
    JsonKursy wyslijKursy(
            @RequestParam(value = "userid", required = true) int login,
            Model model) {

        List<GrupyZajeciowe> grupyzajeciowe = pobierzGrupyService
                .pobierzGrupyZajeciowe(login);
        int idKursu;
        int i;
        JsonKursy jsonKursy = new JsonKursy();
        JsonGrupy jsonGrupy = new JsonGrupy();
        JsonGrupyZajeciowe jsonGrupyZajeciowe = new JsonGrupyZajeciowe();
        List<JsonGrupy> courses = new ArrayList<JsonGrupy>();
        for (i = 0; i < grupyzajeciowe.size(); i++) {
            idKursu = grupyzajeciowe.get(i).getIdKursu().getIdKursy();

            List<Kursy> kurslist = pobierzGrupyService.pobierzKursy(idKursu);

            for (Kursy kurs : kurslist) {
                List<JsonGrupyZajeciowe> name = new ArrayList<JsonGrupyZajeciowe>();
                for (GrupyZajeciowe grupa : grupyzajeciowe) {
                    // set dla JsonGrupyZajeciowe
                    jsonGrupyZajeciowe.setId(grupa.getIdKursu().getIdKursy());
                    jsonGrupyZajeciowe.setCode(grupa.getKodGrupy());
                    jsonGrupyZajeciowe.setName(grupa.getNazwa());
                }
                jsonGrupy.setName(kurs.getNazwaKursu());
                jsonGrupy.setId(kurs.getIdKursy());
                jsonGrupy.setDates(name);
            }
            jsonKursy.setCourses(courses);
            System.out.println("Test wydruk"+ jsonKursy);
        }

        return jsonKursy;
    }

【问题讨论】:

    标签: json spring hibernate jakarta-ee jackson


    【解决方案1】:

    您似乎忘记向courses 列表添加元素。所以序列化为 json 的jsonKursy 对象不包含任何课程。

    这会有所帮助:

    courses.add(jsonGrupy);
    

    【讨论】:

    • 是的,你说得对。非常感谢。你救了我的活人。并且在forech中必须添加一个name.add(jsonGrupyZajeciowe),在jsongrupy之前添加。非常感谢
    猜你喜欢
    • 2012-08-10
    • 2020-02-19
    • 1970-01-01
    • 2020-09-22
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多