Spring REST Репозитории наследуют нулевые значения - PullRequest
0 голосов
/ 12 декабря 2018

У меня возникли проблемы с отображением родительско-дочерних классов в репозиториях Spring Rest.Мой случай заключается в том, что мне нужно аутентифицировать обоих типов пользователей с помощью Spring Security, но я также хочу иметь возможность назначать атрибуты, относящиеся к типу, такие как «Домашние животные», «Владелец» и «Зарплата для сотрудника».Это хорошая структура для достижения такой цели?Если это так, пожалуйста, помогите с этой проблемой.

Я уже сделал это, чтобы вставить в одну таблицу, отличающую одну от другой с колонкой dtype, но не могу вставить любые другие значения, кроме dtype.

IЯ использую новейший Spring Boot (по умолчанию JSON Mapper) с MS SQL.

Это моя полезная нагрузка для запроса POST:

{
    "username": "admin",  // null in db
    "firstName": "Delacruz", // null in db
    "lastName": "House", // null in db
    "dtype": "Owner" // present in db
}

Это моя структура класса:Репозиторий

@RepositoryRestResource(path = "user", collectionResourceRel = "user")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
}

Родительский класс - Пользователь

@Entity
@Table(name = "users")
@Inheritance
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,
        include=JsonTypeInfo.As.EXISTING_PROPERTY,
        property="dtype")
@JsonSubTypes({
        @JsonSubTypes.Type(name="Owner", value=Owner.class),
        @JsonSubTypes.Type(name="Employee", value=Employee.class)})
@RestResource(path="user")
public abstract class User{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String username;
// rest of properties
}

Сотрудник - первый дочерний класс

@EqualsAndHashCode(callSuper = true)
@Entity
@Data
public class Employee extends User {

    private String type = "EMPLOYEE";

    @Column
    @Enumerated
    private EmployeeType employeeType;

    @Column
    private LocalDate dateOfEmployment;
    //rest of properties
}

Владелец - другой дочерний класс

@EqualsAndHashCode(callSuper = true)
@Data
@Entity
public class Owner extends User{
    @OneToMany(mappedBy = "owner")
    private List<Pet> pets;
}

1 Ответ

0 голосов
/ 16 декабря 2018

Добавление следующего конструктора (в соответствии с владельцем) к подклассам решает проблему:

@JsonCreator
public Employee(
        @JsonProperty(value = "username") String username,
        @JsonProperty(value = "firstName") String firstName,
        @JsonProperty(value = "lastName") String lastName,
        @JsonProperty(value = "password") String password,
        @JsonProperty(value = "email") String email,
        @JsonProperty(value = "phoneNumber") String phoneNumber
) {
    super(username, firstName, lastName, password, email, phoneNumber);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...