Spring Boot @ManyToOne только Id @JsonProperty - PullRequest
0 голосов
/ 23 февраля 2020

помогите мне найти аннотацию свойства JSON, которая дает мне возможность выбрать свойство объекта для сериализации JSON. Мне нужен только один.

Я код такой:

@Entity
@Table(name = "pages")
public class Page {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "id")
   private Long id;

   @Column(name = "name")
   private String name;

   @JsonIgnoreProperties(value = {"name", "description", "pages"}) // it's working, but I want to simplify, I need only project id property to JSON
   @ManyToOne(fetch = FetchType.EAGER)
   @JoinColumn(name = "project_id")
   private Project project;

   //getters and setters
} 

И объект проекта:

@Entity
@Table(name = "projects")
public class Project {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "project_id")
    private Long id;

    @Column(name = "project_name")
    private String name;

    @Column(name = "description")
    private String description;


    @OneToMany(targetEntity = Page.class, mappedBy = "project", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @OrderBy("id")
    private List<Page> pages = new ArrayList<>();
}

И JSON должно быть:

   {
        "id": 10,
        "name": "Name",
        "project": {"id":1}
   }

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Я бы не оставил здесь пробелы @GeneratedValue (стратегии = GenerationType.IDENTITY) -> @GeneratedValue (стратегии = GenerationType.IDENTITY). Вам нужен контроллер и служба, аннотированные @Restcontroller и @Service, после чего вы можете установить @Repository и просто «findByID» (Repository действительно понимает это без какой-либо дальнейшей реализации). Идентификатор может быть связан с @Pathvariable и извлекать значение из URL / Project / {id}, и вы можете сделать что-то подобное, например,

@RequestMapping(method=RequestMethod.POST, path="project/{id}")
void addUser(@Pathvariable Long id) {
    ProjectService.delete(id);
}

Попробуйте это https://www.youtube.com/watch?v=QHjFVajYYHM почти так же, как вы пытаетесь.

0 голосов
/ 24 февраля 2020

Вместо того, чтобы работать со слишком большим количеством аннотаций, вы должны вместо этого создать DataTransferObject (DTO).

В DTO вы точно определяете, какая информация должна быть представлена, и сопоставляете каждый объект сущности с DTO. Это то, что возвращается к интерфейсу, а не к самой сущности.

Вот хороший учебник по топи c: https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...