Предоставление идентификатора отношения как части полезной нагрузки JSON для вызовов GET, PUT и POST REST

Переучиваю Java, Springboot в личном проекте. У меня есть сущность с именем User, которая управляется с помощью автоматически сгенерированных каркасов из jHipster. У меня также есть объект UserProfile, который я создал для хранения дополнительных данных (поскольку я не хотел возиться с объектом User. Теперь, когда я открываю конечные точки REST для UserProfile, я хочу, чтобы вызовы GET включали user_id как часть JSON, а вызовы PUT/POST принять user_id вместо UserProfile, выполнить ассоциацию и только затем сохраниться. Используемый ORM — Hibernate/JPA. Какие аннотации Джексона мне следует использовать, чтобы это произошло?

Мой User объект:

public class User {
    @ToString.Exclude
    @OneToOne(mappedBy = "user", orphanRemoval = true, fetch = FetchType.LAZY)
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @JsonIgnore
    private UserProfile userProfile;
}

и мой UserProfile класс:

public class UserProfile {
    @ToString.Exclude
    @ApiModelProperty(value = "Linking the UserProfile to the base User object that is used for authentication")
    @OneToOne(optional = false)
    // Note: Not marking with 'NotNull' annotation since we will not want to update the User object when upserting the UerProfile
    @JoinColumn(unique = true, nullable = false, insertable = true, updatable = false)
    @JsonIgnoreProperties("userProfile")
    private User user;
}

Мои версии: spring_boot_version=2.0.8.РЕЛИЗ hibernate_version=5.2.17.Окончательный

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец-то я сам заработал. Сообщение Этот SO помогло мне решить проблему. И вот мои классы модели предметной области с аннотациями, которые сработали:

public class User {
    @ToString.Exclude
    @OneToOne(mappedBy = "user", orphanRemoval = true, fetch = FetchType.LAZY)
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @JsonIgnore
    private UserProfile userProfile;
}
public class UserProfile {
    @ToString.Exclude
    @ApiModelProperty(value = "Linking the UserProfile to the base User object that is used for authentication")
    @OneToOne(optional = false)
    // Note: Not marking with 'NotNull' annotation since we will not want to update the User object when upserting the UerProfile
    @JoinColumn(unique = true, nullable = false, insertable = true, updatable = false)
    @JsonIgnoreProperties(value = {"login", "password", "firstName", "lastName", "email", "activated", "langKey", "imageUrl", "resetDate"}, ignoreUnknown = true)
    private User user;
}

Другие вопросы по теме