0

我正在使用 Spring MVC 创建一个宁静的 API。我有两个不同的 API 端点,我需要以两种不同的方式序列化相同的 POJO。我在下面说明了相同的内容:

课程 API

url - /course/{id}

response - {
    "id": "c1234",
    "name": "some-course",
    "institute": {
        "id": "i1234",
        "name": "XYZ College"
    }
}

我的CoursePojo 就是按照上面的结构,所以默认的序列化是有效的。

class Course {
    private String id;
    private String name;
    private Institute institute;

    //getters and setters follow
}

class Institute {
    private String id;
    private String name;

    //getters and setters follow
}

现在,对于另一个StudentsAPI

url - /student/{id}

response - {
    "id":"s1234",
    "name":"Jon Doe",
    "institute": {
        "id": "i1234",
        "name": "XYZ college"
    },
    "course": {
        "id": "c1234",
        "name": "some-course"
    }
}

我的Student课看起来像这样:

class Student {
    private String id;
    private String name;
    private Course course;

    //getters and setters follow
}

请注意,类中没有institute属性,Student因为机构可以从course.getInstitute吸气剂中传递确定。但这最终会形成类似于课程 API 的序列化结构。如何在不修改 POJO 结构的情况下仅为学生 API 使用自定义序列化。

我想到了 N 个解决方案,这是我想知道的最优雅和首选的解决方案。

4

1 回答 1

0

我想这是我整理出来的最优雅的东西,对我有用。

所以,这是我的课Student

class Student {

    private String id;
    private String name;

    @JsonIgnoreProperties({"institute"})
    private Course course;

    //getters and setters

    //Adding one more getter
    public Institute getInstitute() {
        return this.course.getInstitute();
    }
}

通过这种方式,我在一段时间内公开了一个 Java bean 属性institutegetter而不是在我的StudentObject.

于 2016-02-08T08:44:10.060 回答