Нулевые поля, когда я использую @JsonProperty для извлечения объекта из MongoDB по данным Spring

У меня проблемы с Spring JPA, MongoDB и Jackson, когда я использую @JsonProperty, чтобы использовать другое имя для полей json / db и java. Я получаю json и сохраняю их в коллекции, например

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "message")
public class Message implements java.io.Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    private String id;

    @JsonProperty("raw")
    private Raw raw;

    @JsonProperty("meta")
    private Meta meta;      
}

с Raw:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "raw")
public class Raw {

    private String dlc;

    @JsonProperty("can_id")
    private String canId;

    @JsonProperty("can_data")
    private String canData;
}

Я использую ломбок для получения, установки и конструктора. У меня был message в базе данных перед изменением имени поля (используя, например, canData вместо can_data), и когда я извлек объект из базы данных, эти переименованные поля были пустыми. Итак, я удалил сообщение и снова сохранил и, наконец, работал, я сделал это, потому что в mongodb я вижу _class:"com.domain.Message".
Это первая проблема: каждый раз, когда я меняю свой Java-класс, все сохраненные данные вызывают у меня эту проблему?
Но у меня проблема даже с вручную вставленным json в Mongodb: поля, в которых я использую @JsonProperty, равны нулю, когда я делаю такой запрос:

@Query("{ 'can_id' : ?0 }")
Severity findByCanId(String canId);

Severity таков:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "severity")
public class Severity implements java.io.Serializable{

    private static final long serialVersionUID = 1L;

    @JsonProperty("can_id")
    @Indexed
    private String canId;       

    @JsonProperty("can_name")
    private String canName;

    private Integer ss;

    private Integer ps;

    private Integer fs;

    private Integer os;
}

Запрос вернул мне объект Severity с нулевым значением canId и canName. Вы знаете, как я могу решить эту проблему? Спасибо

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

Ответы 2

Для имени поля в базе данных я исправляю с помощью @Field("can_id"), но проблема с изменением класса java все еще присутствует

Вы должны заменить @JsonProperty на @BsonProperty

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