Spring Data Rest - скрывать вместо выставления идентификатора
У меня есть класс сущности en, который имеет естественное поле идентификатора отображается как @Id
и у меня нет никакого суррогатного идентификатора (изобретенное поле только для идентификатора таблицы). И в Джексоне маршал JSON я вижу дополнительный id
подвергаются.
Так что вместо:
{
"bin":"123456", ...
}
Я вижу:
{
"id":"123456", "bin":"123456", ...
}
который я не хочу, потому что они повторяют информацию. Как я могу предотвратить это?
Я не коснулся адаптера конфигурации REST/MVC; они предназначены для разоблачения классов ID, но я этого не хочу.
Боб:
@Entity
@Data
@Table(name="bin_info")
public class BinInfo implements Serializable, Persistable<String> {
@Id
@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;
...
Я с этими зависимостями:
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-aop')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-data-rest')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-undertow')
runtime('com.h2database:h2')
runtime('org.postgresql:postgresql')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('io.cucumber:cucumber-java:3.0.2')
testCompile('io.cucumber:cucumber-junit:3.0.2')
testCompile('io.cucumber:cucumber-spring:3.0.2')
}
Spring Boot 2.0.3.
4 ответа
Спасибо всем, я думаю, что это связано с некоторой конфигурацией Спрингса или Джексона, которая автоматически выставляет поле, сопоставленное с @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 нормально и нормально.