我的数据对象包括我在项目中使用的库中的混合基元和数据对象。我知道我可以通过利用 @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/