Джексон @JsonView весной MVC игнорируется - PullRequest
0 голосов
/ 29 января 2019

У меня есть класс, который представляет Treestructure и имеет атрибуты (идентификатор, имя, дети).У меня есть два REST-контроллера.Предполагается, что возвращается представление json одного узла без его дочерних элементов.Другой должен вернуть тот же узел со всеми его потомками.Вот как выглядит мой код.

public class TreeNode{
    private Long id;
    private String name;
    @JsonView(WithChildren.class)
    private List<Children> children;
}

@RestController
public class TreeNodeController{
    private root = new TreeNode(0,"root",new ArrayList(new TreeNode(1,"child",new ArrayList());

    @GetMapping("/single/")
    public TreeNode getSingle(){
        return this.root;
    }

    @GetMapping("/recursive/")
    @JsonView(WithChildren.class)
    public TreeNode getRecursive(){
        return this.root;
    }
}

Я ожидал, что вызов /single/ вернет что-то подобное:

{
    id:0,
    name:'root'
}

, тогда как вызов /recursive/ должен вернутьсячто-то вроде

{
    id:0,
    name:'root',
    children:[{
        id:1,
        name:'child',
        children:[]
    }]
}

Но все, что я делал, кажется игнорируемым, потому что оба запроса /single/ и /recursive/ возвращают полный список атрибутов.Надеюсь, кто-то из вас признает мои ошибки.

Конфигурация Джексона выглядит следующим образом:

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
    Jackson2ObjectMapperBuilder b = new Jackson2ObjectMapperBuilder() {
        @Override
        public void configure(ObjectMapper objectMapper) {
            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
            objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
            super.configure(objectMapper);
        }
    };
    b.indentOutput(true)
    .failOnUnknownProperties(false)
    .featuresToEnable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
    .featuresToEnable(MapperFeature.DEFAULT_VIEW_INCLUSION);
    return b;
}
...