Спасибо всем, я думаю, что это связано с некоторой конфигурацией Спринг или Джексона, которая автоматически выставляет поле, сопоставленное с @Id
. Я могу только догадываться, потому что нет времени для подтверждения.
И некоторые коллеги предлагают мне определить DTO вместо того, чтобы помещать аннотации @Jsonxxx
в классе, заявив, что модель представляет модель данных и связана с таблицей, а DTO связана со слоем представления. Я так и сделал, и теперь все в порядке.
Теперь модель свободна от поля id
и @JsonProperty
/ @JsonIgnore
:
@Entity
@Data
@Table(name="bin_info")
public class BinInfo implements Serializable, Persistable<String> {
@Id
@NaturalId
@NotBlank //this is for absent parameter. Not equal to Pattern regex check
@Pattern(regexp = "^\\d{6,8}$") //6-8 digits
@Column(name="bin")
//@JsonProperty("bin")
private String bin;
...
И DTO совершенно без @Id
:
@Data
public class BinInfoDTO {
@JsonProperty("bin")
private String bin;
@JsonProperty("json_full")
private String json_full;
...
Когда я получаю объект, с помощью метода отображения я устанавливаю все значения, которые мне нужны в DTO, в DTO и возвращаю его в конечную точку. Тогда JSON нормально и нормально.