为了账号安全,请及时绑定邮箱和手机立即绑定

内部对象的 JSON 到 Java 映射?

内部对象的 JSON 到 Java 映射?

胡说叔叔 2023-06-14 16:24:34
我有以下课程:public class PersonResponse {    public static final class Profile {        int id;    }    public static class Error {        String message;        int code;    }    String name;    Profile profile;    //getters/setters}映射JSON响应,如下所示:{    "name" : "first last",    "profile" : {        "id" : 1234    },    "error" : {        "message": "some random error",        "code" : 404    }}这工作正常,但我有一个端点只返回Profile对象或一些错误。因此响应可能是: {    "id" : 1234 }或者{  "message": "profile not found",  "code" : 404}在这种情况下有什么方法可以重用该类,PersonResponse而不是在Profile对象内部也添加一个错误对象吗?
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

是的,您可以使用Jackson @JsonView来做到这一点。


首先,您必须创建一个类来声明您的观点。


    public class PersonResponseViews {


        public static class Person { }


        public static class Profile { }

    }

PersonResponse那么你必须在类中包含这些更改


    import com.fasterxml.jackson.annotation.JsonAutoDetect;

    import com.fasterxml.jackson.annotation.JsonProperty;

    import com.fasterxml.jackson.annotation.JsonView;


    @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)

    class PersonResponse {


        @JsonView(PersonResponseViews.Person.class)

        String name;


        @JsonView(PersonResponseViews.Person.class)

        Profile profile;


        @JsonView({

            PersonResponseViews.Person.class,

            PersonResponseViews.Profile.class

        })

        Error error;


        @JsonProperty("id")

        @JsonView(PersonResponseViews.Profile.class)

        int getProfileId() {

            int id = 0;


            if (profile != null) {

                id = profile.id;

            }


            return id;

        }


        @JsonView({

            PersonResponseViews.Person.class,

            PersonResponseViews.Profile.class

        })

        @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)

        static class Error {


            String message;

            int code;

        }


        @JsonView(PersonResponseViews.Person.class)

        @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)

        static class Profile {

            int id;

        }

    }

如何将JSON视图与Spring Rest 控制器一起使用


    @JsonView(PersonResponseViews.Person.class)

    @RequestMapping("/person")

    public @ResponseBody

    PersonResponse getPerson() {

        PersonResponse resp = new PersonResponse();  

        resp.name = "first last";

        resp.profile = new PersonResponse.Profile();

        resp.profile.id = 1234;

        resp.error = new PersonResponse.Error();

        resp.error.code = 404;

        resp.error.message = "some random error";

        return resp;

    }


    @JsonView(PersonResponseViews.Profile.class)

    @RequestMapping("/profile")

    public @ResponseBody

    PersonResponse getProfile() {

        PersonResponse resp = new PersonResponse();

        resp.profile = new PersonResponse.Profile();

        resp.profile.id = 1234;

        resp.error = new PersonResponse.Error();

        resp.error.code = 404;

        resp.error.message = "some random error";

        return resp;

    }


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信