@RestResource(exported=false) игнорируется

как в заголовке - мой @RestResource (exported = false) игнорируется в поле. Spring data rest все еще хочет сделать из него json, я бы хотел просто пропустить его сейчас, так как изменение rel в WorkflowEvent ничего мне не дало.

 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "submission")
@OrderBy("date desc")
@RestResource(exported = false)
private List<WorkflowEvent> events = new ArrayList<WorkflowEvent>();

Я получил:

{"timestamp":1410850806347,"status":500,"error":"Internal Server Error","exception":"org.springframework.http.converter.HttpMessageNotWritableException","message":"Could not write JSON: Detected multiple association links with same relation type! Disambiguate association @javax.persistence.JoinColumn(insertable=true, unique=false, referencedColumnName=, columnDefinition=, name=submission_id, updatable=true, nullable=true, table=, [email protected](name=, value=CONSTRAINT, foreignKeyDefinition=)) @javax.persistence.ManyToOne(fetch=EAGER, cascade=[], optional=true, targetEntity=void) @org.springframework.data.rest.core.annotation.RestResource(description=@org.springframework.data.rest.core.annotation.Description(value=), path=, exported=false, rel=) private mypackage.MyClass mypackage.WorkflowEvent.myclass using @RestResource!; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Detected multiple association links with same relation*

Конечно, это работает, когда я комментирую это поле.

Мои версии:

\- org.springframework.data:spring-data-rest-webmvc:jar:2.1.4.RELEASE:compile
[INFO] |     \- org.springframework.data:spring-data-rest-core:jar:2.1.4.RELEASE:compile
[INFO] |        +- org.springframework.hateoas:spring-hateoas:jar:0.16.0.RELEASE:compile

person freakman    schedule 16.09.2014    source источник


Ответы (1)


@RestResources поддерживается только для свойств домена, которые указывают на управляемые ресурсы. Таким образом, если вы не предоставляете WorkflowEvent управляемому репозиторию Spring Data REST, аннотация не имеет никакого эффекта. В этом случае просто используйте @JsonIgnore, чтобы Джексон не отображал свойство.

person Oliver Drotbohm    schedule 16.09.2014
comment
Даже если у него есть репозиторий, @RestResource(exported=false) в свойстве WorkflowEvent в каком-то другом объекте не имеет никакого эффекта. Если я удалю репозиторий, он все равно попытается создать ссылку на объект WorkflowEvent. Он вылетает с обнаружением нескольких ссылок ассоциации на mypackage.WorkflowEvent.submission - person freakman; 17.09.2014
comment
Это, кажется, становится довольно вовлеченным. Есть ли шанс, что вы предоставите образец проекта для просмотра? - person Oliver Drotbohm; 17.09.2014
comment
кажется, что это вызвано отсутствием репозитория для каких-либо свойств (теперь я удалил один для WorkflowEvent, чтобы воспроизвести его). Если он есть - все в порядке - ссылки генерируются и работают нормально. Оливер - если для этого нет рациональной причины, я попытаюсь создать небольшой проект с этой проблемой. - person freakman; 17.09.2014
comment
Хотя @JsonIgnore работает, я считаю, что Spring Data REST должен иметь способ поддержки не рендеринга свойств только на стороне REST внешнего интерфейса. Он не должен полагаться на аннотацию Джексона, которая может конфликтовать с другой логикой бэкэнда, если бэкэнд также использует Джексона для сериализации json (например, для создания моментальных снимков сущностей). - person JW Lim; 17.06.2016
comment
@JWLim — вот какие проекции предназначены для. - person Oliver Drotbohm; 19.06.2016
comment
Но, насколько я понимаю, у вас не может быть проекции по умолчанию для одного ресурса, поэтому требуются аннотации Джексона. - person Alan Hay; 09.09.2016
comment
Это должно быть задокументировано в документации SD Rest, если это еще не сделано. Просто столкнулся с этой проблемой, несколько раз просмотрел документы и не нашел упоминания об этом. - person loesak; 01.11.2017