Пустые поля, когда я использую @JsonProperty для извлечения объекта из MongoDB по данным Spring - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть некоторые проблемы с 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;      
}

с сырьем:

@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;
}

Я использую lombok для получения, установки и конструктора. У меня было 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 null. Вы знаете, как я могу решить эту проблему? Спасибо

1 Ответ

0 голосов
/ 12 ноября 2018

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

...