У меня есть класс, который представляет 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;
}