Java 为什么defaultViewInclusion忽略@JsonView并打印每个字段?

Java 为什么defaultViewInclusion忽略@JsonView并打印每个字段?,java,spring-boot,spring-mvc,jackson,Java,Spring Boot,Spring Mvc,Jackson,考虑以下示例: @JsonView(MyView.class) @SneakyThrows @GetMapping(path = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) public List<DTO> get(@PathVariable Integer id) { return service.getAllById(id); } 我使用的是spring引导,所以当我将spring.ja

考虑以下示例:

@JsonView(MyView.class)
@SneakyThrows
@GetMapping(path = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public List<DTO> get(@PathVariable Integer id) {
    return service.getAllById(id);
}
我使用的是spring引导,所以当我将
spring.jackson.mapper.DEFAULT\u VIEW\u INCLUSION
设置为
false
时,该端点的响应只是一个空数组
[]
。虽然当我将此属性设置为
true
时,我得到的是一个包含所有字段的对象数组,而不是标记为
@JsonView
的对象数组。我错过了什么

脏溶液:

我可以通过在类表示法上指定虚拟注释来解决此问题,如下所示:

@Data
@JsonView(Dummy.class)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DTO {

    private Integer id;

    @JsonView(MyView.class)
    private String name;
}

这样,所有未标记为
@JsonView(MyView.class)
的字段都标记为
@JsonView(Dummy.class)
,因此它们不会受到默认视图排除的愚蠢实现的影响。

是否在映射器上指定类似的最终字符串serializedValue=objectMapper.writerWithView(View.MyView.class)??除此之外,您还可以添加定义的接口/类伪和MyView吗?@JsonView注释只能指定一个类或接口,但您可以使用继承来表示JSON视图层次结构。它们在单独的文件中定义为空接口。在这种情况下,我不使用继承。我无法复制您的问题是,我创建了一个项目来模拟与您相同的条件,但它对我有效。当我向邮递员请求时,响应是预期的行为。这是一个指向该项目的链接,您的配置中应该有其他内容未在此处发布,这使其失败。您是否可以共享一个类似的项目,但有问题你有吗?如果它有助于解决问题,那么我上传到github上的项目具有你告诉我的所有依赖项,并且它可以工作。
@Data
@JsonView(Dummy.class)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DTO {

    private Integer id;

    @JsonView(MyView.class)
    private String name;
}