我有views
和entity
类别,如下所示:
class Views{
class ViewOne{}
class ViewTwo{}
}
class Test{
@JsonView({Views.ViewOne.class})
public int x;
@JsonView({Views.ViewTwo.class})
public int y;
public int z;
public int v;
}
我的问题是,我是否需要在类级别使用@JsonView({Views.ViewOne.class, Views.ViewTwo.class})
,以便无论传递给Object Mapper的View类如何,输出响应中都具有诸如z, v
之类的非注释字段?
我确实尝试研究有关使用类级别@JsonView
批注的其他资源,但我找不到任何资源。有效果吗?如果是,请解释相同的内容。
答案 0 :(得分:1)
我是否需要在类级别使用
ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4
,以便与传递给{{1}的视图类无关,在输出响应中有诸如@JsonView({Views.ViewOne.class, Views.ViewTwo.class})
,z
这样的非注释字段}?
在您的v
实例中启用MapperFeature.DEFAULT_VIEW_INCLUSION
时,您将不需要它。默认情况下启用了此功能。您可能以某种方式禁用了它吗?
这是文档中的引言:
确定JSON序列化视图中是否包含不包含视图批注的属性的功能(有关JSON视图的更多详细信息,请参见
@JsonView
)。如果启用,将包括非注释属性;禁用时,它们将被排除。
让我们考虑以下ObjectMapper
类:
ObjectMapper
让我们使用以下命令将Example
的实例序列化为JSON:
@Data
public class Example {
private int a = 1;
private int b = 2;
private int c = 3;
}
它将产生以下JSON:
Example
现在让我们考虑以下观点:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new Foo());
让我们将视图应用于{"a":1,"b":2,"c":3}
类的字段:
public class Views {
public static class Foo {}
public static class Bar {}
}
让我们使用Example
视图序列化@Data
public class Example {
@JsonView(Views.Foo.class)
private int a = 1;
@JsonView(Views.Bar.class)
private int b = 2;
private int c = 3;
}
的实例:
Example
它将产生以下JSON:
Foo
现在让我们禁用默认视图,并再次对其进行序列化:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writerWithView(Views.Foo.class).writeValueAsString(new Example());
它将产生以下JSON:
{"a":1,"c":3}
现在让我们在ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
String json = mapper.writerWithView(Views.Foo.class).writeValueAsString(new Example());
类中使用以下视图配置:
{"a":1}
让我们使用Example
视图序列化@Data
@JsonView(Views.Foo.class)
public static class Example {
private int a = 1;
@JsonView(Views.Bar.class)
private int b = 2;
private int c = 3;
}
的实例:
Example
它将产生以下JSON:
Foo
现在,让我们使用ObjectMapper mapper = new ObjectMapper();
String json = mapper.writerWithView(Views.Foo.class).writeValueAsString(new Example());
视图序列化{"a":1,"c":3}
的实例:
Example
它将产生以下JSON:
Bar