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




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