gpt4 book ai didi

java - @JsonView 注解如何用于嵌套实体?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:25 25 4
gpt4 key购买 nike

我正在尝试为我的嵌套实体使用 @JsonView 注释。更清楚地说,假设我们有 2 个实体,每个实体都有自己的 View 类。

public class JsonViewAddress {
//some view classes
}


public class Address {
//fields annotated by JsonViewAddress's classes and @JsonProperty
}

public class JsonViewPerson {
//some view classes
}

public class Person {

//some fields (yes annotated with JsonViewPerson classes and @JsonProperty)

//also assume that this is annotated with any JsonViewPerson's class.
private Address address;

}

让我们尝试用响应中的 Json 类型来实现这个 Person 类

@Path("hey")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class Resource {


@GET
@Path("/stack/overflow")
@JsonView(value = { /* WHAT SHOULD BE WRITTEN HERE ? */ })
public Response method() {
//return Person entity in response
}
}

@JsonView 注释采用 String 数组,但我应该如何确定这些书面 View 类必须明确地为它们所属的每个实体工作?我想很快看到 UserView 适用于 User,AddressView 适用于 Address。

谢谢。

最佳答案

我有一个类似的问题,这不完全是你的问题,但也许这种方法对你有用。

我只用了一个ViewObject

public class Views {

public static class Low {
}

public static class Medium extends Low {
}

public static class High extends Medium {
}
}

每次我有一个嵌套对象时,我都需要在 Views.Low View 中使用它,所以我编写了一个序列化程序来执行此操作。

public class Serializer extends JsonSerializer<Object> {

@Override
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writerWithView(Views.Low.class).writeValue(jgen, value);
}
}

最后在我的对象中我这样使用:

public class Person {

@JsonView(Views.High.class)
@JsonSerialize(using = Serializer.class)
private Address address;

}

资源:

@Path("hey")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class Resource {


@GET
@Path("/stack/overflow")
@JsonView(Views.High.class)
public Response method() {
//return Person entity in response with address low view
}

@GET
@Path("/stack/overflow")
@JsonView(Views.Medium.class)
public Response method() {
//return Person entity in response with no address
}

}

您可以使用这种方法来解决您的问题,但如果您使用不同的类 View ,则必须编写大量序列化程序。

关于java - @JsonView 注解如何用于嵌套实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19638550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com