JSON -> Сущность с данными Spring JPA / Spring REST

У меня есть класс Foo и класс Bar:

@Entity
public class Foo extends BaseEntity {
    private Long id;
    private String foo;
}

@Entity
public class Bar extends BaseEntity{
    private Long id;
    private String bar;
}

И @Controller

@Controller
...
    @RequestMapping(value = "/foo/{foo}")
    public void foo(@PathVariable("foo") Foo foo) {
...

С Spring Data JPA и Sprint REST я могу пройти, например. Foo в качестве идентификатора в URL-адресе и автоматически получить объект Foo через встроенный преобразователь класса домена http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core.web.basic.domain-class-converter:

Это прекрасно работает. Но в некоторых случаях я хочу отправлять данные в контроллер через JSON вместо параметра URL.

{
    foo : {id : 42},
    bar : {id : 123},
}

Можно ли автоматически получить это аналогично полностью загруженным из JPA (а не только инициализированным с идентификатором)?

Я пробовал @RequestBody, но это только инициализирует значения, заданные запросом, без загрузки объекта из базы данных.


person lilalinux    schedule 01.02.2017    source источник
comment
Вы спрашиваете об отправке данных JSON с помощью POST или о том, как проанализировать данный JSON для представления объекта? Для первой проверки: stackoverflow.com/questions/17964841/   -  person Dominik Kunicki    schedule 01.02.2017
comment
Я спрашиваю о @Controller, получающем JSON   -  person lilalinux    schedule 01.02.2017
comment
поэтому этот ответ должен помочь: stackoverflow.com/a/36849152/1653268   -  person Dominik Kunicki    schedule 01.02.2017
comment
Этот ответ не загрузит объект JPA, а инициализирует его только опубликованными данными (только идентификатор). Я хотел бы получить полный объект, как это делает Джексон с @PathVariable   -  person lilalinux    schedule 01.02.2017
comment
Боюсь, это невозможно. Spring Data REST использует метод GET для поиска данных и POST для создания новых экземпляров. См. 5-ю главу документации: docs.spring.io/spring -данные/остальные/документы/текущий/ссылка/html   -  person Dominik Kunicki    schedule 01.02.2017
comment
Возможно, это можно сделать, зарегистрировав ConditionalGenericConverter, как здесь candrews. Integerblue.com/2015/07/   -  person lilalinux    schedule 01.02.2017