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