【发布时间】:2019-05-11 15:21:36
【问题描述】:
我在 Spring Boot 中有项目。我有 User 模型,Profile 模型与OneToOne 有什么关系:
用户:(简体)
@Entity
@Table(name = "users")
public class User extends AbstractEntity {
@Id
@GeneratedValue
private Integer id;
@NotEmpty
@Basic(optional = false)
@Column(nullable = false, unique = true)
private String username;
@Valid
@JsonIgnore
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
private Profile profile;
@JsonIgnore
public Profile getProfile() {
return profile;
}
@JsonProperty
public void setProfile(Profile profile) {
this.profile = profile;
}
}
简介:(简体)
@Entity
@Table(name = "profiles")
public class Profile extends AbstractEntity {
@Id
@GeneratedValue
private Integer id;
@NotEmpty
@Basic(optional = false)
@Column(nullable = false)
private String name;
@NotEmpty
@Basic(optional = false)
@Column(nullable = false)
private String surname;
// Getters, setters, etc
}
我的测试:
@Test
public void createUserAndProfileReturnsCreatedStatus() throws Exception {
final User user = Generator.generateUser();
user.setProfile(Generator.generateProfile());
MvcResult mvcResult = this.mockMvc.perform(
post("/users")
.contentType(MediaType.APPLICATION_JSON)
.content(toJson(user)))
.andExpect(status().isCreated())
.andReturn();
}
问题是,当我执行user.setProfile() 时,配置文件设置为用户,但是当我调用toJson(user) 时,由于模型中的注释,它会自动被忽略。
如何仅出于测试目的禁用这些注释?可能吗?
我不想从模型中删除@JsonIgnore 注释,因为当我READ 用户GET /users/<id> 时,它们不会暴露个人资料。
【问题讨论】:
-
由于您的测试似乎是一个集成测试(或多或少),因此您不希望这样做,因为调用资源时您并不期望此输出。
-
@maio290 我希望
201 - Created当我调用POST /users时,会在数据库中创建新的用户+ 个人资料。当然,我可以手动编写 JSON 请求正文,但它会很痛苦,而且制作起来很慢。 -
我的错,在你的测试中被误解了一个部分。但是,据我所知,@JsonIgnore 是杰克逊的注释。您可以尝试使用json-b序列化对象,它不应该注意Jackson的注释。
标签: java json spring rest jackson2