Java Spring Boot JUnit Jackson无法反序列化所有字段
我有一个无法通过的测试用例:Java Spring Boot JUnit Jackson无法反序列化所有字段,java,spring,spring-boot,junit,jackson,Java,Spring,Spring Boot,Junit,Jackson,我有一个无法通过的测试用例: ContactDTO contactDTO = generateContactDTO(); HttpEntity<ContactDTO> request = new HttpEntity<>(contactDTO, headers); ResponseEntity<Response> response = restTemplate.exchange(generateBaseUrl() + "/contacts", HttpMe
ContactDTO contactDTO = generateContactDTO();
HttpEntity<ContactDTO> request = new HttpEntity<>(contactDTO, headers);
ResponseEntity<Response> response = restTemplate.exchange(generateBaseUrl() + "/contacts", HttpMethod.POST, request, Response.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
ContactDTO ContactDTO=generateContactDTO();
HttpEntity请求=新的HttpEntity(contactDTO,标头);
ResponseEntity response=restemplate.exchange(generateBaseUrl()+“/contacts”,HttpMethod.POST,request,response.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
这是我的班级联系方式:
public class ContactDTO {
@NotNull
@Size(min = 2, max = 100)
private String firstName;
@NotNull
@Size(min = 2, max = 100)
private String lastName;
@NotNull
@Size(min = 3, max = 100)
private String email;
@NotNull
@Size(min = 3, max = 50)
private String phoneNumber;
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
ContactDTO(@JsonProperty("firstName") @NotNull @Size(min = 2, max = 100) String firstName,
@JsonProperty("lastName") @NotNull @Size(min = 2, max = 100) String lastName,
@JsonProperty("email") @NotNull @Size(min = 3, max = 50) String email,
@JsonProperty("phoneNumber") @NotNull @Size(min = 3, max = 50) String phoneNumber) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phoneNumber = phoneNumber;
}
String getFirstName() {
return firstName;
}
void setFirstName(String firstName) {
this.firstName = firstName;
}
String getLastName() {
return lastName;
}
void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
private void setEmail(String email) {
this.email = email;
}
String getPhoneNumber() {
return phoneNumber;
}
private void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
@PostMapping
public ResponseEntity<Response<String>> createContact(@Validated @RequestBody ContactDTO contactDTO, BindingResult bindingResult) {
if (bindingResult.getErrorCount() > 0) {
LOG.debug("Contact could not validated: {} and won't be created" +
" Validation error is as follows: {}", contactDTO, bindingResult);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new Response<>(Error.CONTACT_VALIDATION));
}
...
}
public class ContactDTO{
@NotNull
@尺寸(最小值=2,最大值=100)
私有字符串名;
@NotNull
@尺寸(最小值=2,最大值=100)
私有字符串lastName;
@NotNull
@尺寸(最小值=3,最大值=100)
私人字符串电子邮件;
@NotNull
@尺寸(最小值=3,最大值=50)
私有字符串电话号码;
@JsonCreator(mode=JsonCreator.mode.PROPERTIES)
ContactDTO(@JsonProperty(“firstName”)@NotNull@Size(min=2,max=100)字符串firstName,
@JsonProperty(“lastName”)@NotNull@Size(最小值=2,最大值=100)字符串lastName,
@JsonProperty(“电子邮件”)@NotNull@Size(最小值=3,最大值=50)字符串电子邮件,
@JsonProperty(“phoneNumber”)@NotNull@Size(最小值=3,最大值=50)字符串phoneNumber){
this.firstName=firstName;
this.lastName=lastName;
this.email=电子邮件;
this.phoneNumber=电话号码;
}
字符串getFirstName(){
返回名字;
}
void setFirstName(字符串firstName){
this.firstName=firstName;
}
字符串getLastName(){
返回姓氏;
}
void setLastName(字符串lastName){
this.lastName=lastName;
}
公共字符串getEmail(){
回复邮件;
}
私人无效电子邮件(字符串电子邮件){
this.email=电子邮件;
}
字符串getPhoneNumber(){
返回电话号码;
}
私有void setPhoneNumber(字符串phoneNumber){
this.phoneNumber=电话号码;
}
}
@邮戳
public ResponseEntity createContact(@Validated@RequestBody ContactDTO ContactDTO,BindingResult BindingResult){
if(bindingResult.getErrorCount()>0){
debug(“联系人无法验证:{},将不会被创建”+
“验证错误如下:{}”,contactDTO,bindingResult);
返回ResponseEntity.status(HttpStatus.BAD_请求).body(新响应(错误。联系_验证));
}
...
}
当我调试它时,我看到在它被发送到控制器之前,所有字段都在contactDTO中填充。然而,在控制器上,只填充电子邮件字段,结果是HTTP错误请求
PS:我使用Spring Boot 2.1.7。发行版由于没有公共访问器,Jackson无法序列化我的DTO。因此,我在DTO对象的顶部添加了以下内容:
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
你能显示控制器的代码吗?请同时显示你的GenerateContactTo代码。你好,Kamaci,请创建ContactDTO的JSON字符串,并验证是否创建了正确的JSON,同时显示错误请求的原因。可能是你没有在headerI中设置应用程序类型。我已经添加了我的控制器代码。调试绑定结果时,绑定结果有错误。generateContactDTO()运行良好,因为它填充了对象的字段。当我通过Postman测试它时,我没有得到任何错误。@VishalPawar我已经从该对象创建了json字符串,那里只写了电子邮件。