gpt4 book ai didi

java - 如何控制 JsonView 外部/打包对象属性的可见性?

转载 作者:行者123 更新时间:2023-11-30 03:03:27 25 4
gpt4 key购买 nike

我的数据对象包括我在项目中使用的库中的混合基元和数据对象。我知道我可以通过利用 @JsonView 注释来控制 Ajax 调用中返回到浏览器的数据,但这不适用于库中定义的数据对象 - 因为这些字段未在这些库中的数据对象定义中进行注释。下面的示例,其中 LatLng 来自 geospatial library我在用。我该如何解决这个问题?我希望 LatLng 中的纬度和经度包含在 Ajax 响应中。

import com.javadocmd.simplelatlng.LatLng;

public class Waypoint
{
@JsonView(Views.Public.class)
private int number;

private int previousNumber;

@JsonView(Views.Public.class)
private LatLng latLon;
}

更新1

我尝试简单地包装第三方对象,它有效:

public class LatLng extends com.javadocmd.simplelatlng.LatLng implements Serializable
{
private static final long serialVersionUID = -5859289528464880247L;

@JsonView(Views.Public.class)
private long latitude;

@JsonView(Views.Public.class)
private long longitude;

public LatLng(double latitude, double longitude)
{
super(latitude, longitude);
}
}

更新2

suggested by Jan Chimiak ,MixIns 是更好的方法。无需更新对新包装类的所有对象引用...我将以下内容添加到我的 MVC

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters)
{
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().mixIn(LatLng.class, LatLngMixIn.class).build();
converters.add(new MappingJackson2HttpMessageConverter(objectMapper));
super.configureMessageConverters(converters);
}

并定义我的 MixIn 如下:

public abstract class LatLngMixIn
{
@JsonView(Views.Public.class)
private long latitude;

@JsonView(Views.Public.class)
private long longitude;
}

最佳答案

使用混入。请参阅https://github.com/FasterXML/jackson-docs/wiki/JacksonMixInAnnotations

这样,您就可以在您的类中定义注释,无论第 3 方库中定义了什么。

关于java - 如何控制 JsonView 外部/打包对象属性的可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35382263/

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