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字符串,那里只写了电子邮件。