my project gives an error when I turn on the debugger
org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.example.vaadin.DTO.ContactInfo]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.vaadin.DTO.ContactInfo` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
My project, some classes. It seems that he wrote everything correctly, got the necessary annotations, but he gives me an error, went through a debugger. You can look at the code, maybe something is incorrectly written in the project. I want to display domain information in the interface
My code
@Data
@AllArgsConstructor
public class ContactInfo {
private String handle;
private String name;
private String voice;
private String fax;
private String email;
}
MainView
@Route
@Service
public class MainView extends VerticalLayout {
RestTemplate restTemplate = new RestTemplate();
public String URL() {
return "http://localhost:8080/api/whois";
}
private ResponseEntity<DomainDTO> domainDTO(String url, Request request) {
// return restTemplate.postForObject(url, request, DomainDTO.class);
ResponseEntity<DomainDTO> domainDTOResponseEntity = restTemplate.postForEntity(url, request, DomainDTO.class);
System.out.println(">>>>>>>>>>>>>>>" + domainDTOResponseEntity); ///////////////////////
return domainDTOResponseEntity;
}
public MainView() {
FormLayout formLayout = new FormLayout();
TextField textField = new TextField();
textField.setPlaceholder("please input domain");
textField.setWidth("630px");
textField.setHeight("50px");
Text text1 = new Text("");
VerticalLayout v1 = new VerticalLayout();
v1.add(text1);
Button button = new Button("SHOW");
button.addClickListener(event -> {
DomainDTO dto = domainDTO(URL(), new Request(textField.getValue())).getBody();
text1.setText(report(dto));
}
);
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
formLayout.addFormItem(textField, "DOMAIN");
button.setWidth("30%");
formLayout.addFormItem(button, " ");
add(formLayout, v1);
}
private String report(DomainDTO dto) {
StringBuffer sb = new StringBuffer();
sb
.append("Domain Name............: ").append(dto.getDomainInfo().getDomainName()).append(System.lineSeparator())
.append(System.lineSeparator())
.append("Organization Using Domain Name").append(System.lineSeparator())
.append("Name...................: ").append(dto.getDomainInfo().getName()).append(System.lineSeparator())
.append("Organization Name......: ").append(dto.getDomainInfo().getOrganizationName()).append(System.lineSeparator())
.append("Street Address.........: ").append(dto.getDomainInfo().getStreetAddress()).append(System.lineSeparator())
.append("City...................: ").append(dto.getDomainInfo().getCity()).append(System.lineSeparator())
.append("State..................: ").append(dto.getDomainInfo().getState()).append(System.lineSeparator())
.append("Postal Code............: ").append(dto.getDomainInfo().getPostalCode()).append(System.lineSeparator())
.append("Country................: ").append(dto.getDomainInfo().getCountry()).append(System.lineSeparator())
.append(System.lineSeparator())
.append("Administrative Contact/Agent").append(System.lineSeparator())
.append("Nick Handle............: ").append(dto.getContactInfo().getHandle()).append(System.lineSeparator())
.append("Phone Number...........: ").append(dto.getContactInfo().getVoice()).append(System.lineSeparator())
.append("Fax....................: ").append(dto.getContactInfo().getFax()).append(System.lineSeparator())
.append("Email Address..........: ").append(dto.getContactInfo().getEmail()).append(System.lineSeparator())
.append(System.lineSeparator())
.append("Nameserver in listed order").append(System.lineSeparator())
.append(System.lineSeparator());
dto.getHostInfo().forEach(hInfo -> sb
.append("Server.................: ").append(hInfo.getName()).append(System.lineSeparator())
.append("Ip address.............: ").append(hInfo.getIpaddr()).append(System.lineSeparator())
.append(System.lineSeparator())
);
sb.append(System.lineSeparator());
dto.getStatusInfo().forEach(sInfo -> sb
.append("Domain created: ").append(sInfo.getCreated()).append(System.lineSeparator())
.append("Last modified: ").append(sInfo.getUpdated()).append(System.lineSeparator())
.append("Domain status: ").append(sInfo.getStatus()).append(System.lineSeparator())
.append("Registrar created: ").append(sInfo.getRegistarcr()).append(System.lineSeparator())
.append("Current Registrar: ").append(sInfo.getRegistrar()).append(System.lineSeparator())
.append(System.lineSeparator())
);
return sb.toString();
}
}
DomainDTO
@Data
@AllArgsConstructor
public class DomainDTO {
private DomainInfo domainInfo;
private ContactInfo contactInfo;
private List<HostInfo> hostInfo;
private List<StatusInfo> statusInfo;
}
AppConfig
@Configuration
public class AppConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}