内部对象的 JSON 到 Java 映射?

我有以下课程:


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对象内部也添加一个错误对象吗?


胡说叔叔
浏览 114回答 1
1回答

DIEA

是的,您可以使用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;    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java