Опубликуйте JSON с @ManyToOne Relationship в Spring Boot - PullRequest
0 голосов
/ 14 мая 2019

Я написал тестовое приложение при весенней загрузке. Сотрудники имеют отношение к отделу. CRUD работает, но я не уверен, что делаю это правильно.

Когда я создам нового сотрудника, я должен отправить следующий почтовый запрос

    "id": 3,
    "firstname": "John",
    "lastname": "Doe",
    "salary": 50000,
    "department": {
        "id": 2,
        "name": "Sales"
    } 
}

Это класс работника:

@Entity
public class Employee {
    @Id
    @GeneratedValue
    private Long id;
    private String firstname;
    private String lastname;

        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "department_id", referencedColumnName="id")
    private Department department;
    private int salary;

Это метод создания в EmployeeController:

    @PostMapping("/employees")
    public Employee create(@RequestBody Employee employee) {
        return employeeService.add(employee);
    }

Записи отдела уже существуют. Можно ли создать сотрудника без заполнения полного отношения (Департамент)? Я хотел бы добавить только идентификатор отдела. Но если я сделаю это, поле имени в данных json будет пустым (запрос get)

id  3
firstname   "John"
lastname    "Doe"
department  
  id    2
  name  null
salary  50000

Есть ли лучший подход?

1 Ответ

0 голосов
/ 14 мая 2019

Вы принимаете сущность в качестве тела запроса, что не является правильным подходом. Вы можете взять некоторые VO в качестве объекта запроса, а затем преобразовать в сущность внутри службы. Для E.g

EmployeeVO{
private String firstname;
private String lastname;
List<Integer> departments;
}

Кроме того, вы можете использовать аннотации Джексона, такие как @JsonIgnoreProperties (ignoreUnknown = true) @JsonInclude (JsonInclude.Include.NON_NULL), чтобы игнорировать неизвестные атрибуты и включать ненулевые атрибуты.

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