我的数据对象包括我在项目中使用的库中的混合原语和数据对象。我知道我可以通过利用@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;
}
答案 0 :(得分:1)
使用mixins。见http://wiki.fasterxml.com/JacksonMixInAnnotations
这样,无论第三方库中定义了什么,您都可以在 类中定义注释。