我有关于构造函数(弹簧启动和瓦丁)



我的项目在打开调试器时出错

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)

我的项目,一些类。似乎他写了所有内容,得到了必要的注释,但他给了我一个错误,通过了调试器。你可以看看代码,也许项目中写错了什么。我想在界面中显示域信息

我的代码

@Data
@AllArgsConstructor
public class ContactInfo {
    private String handle;
    private String name;
    private String voice;
    private String fax;
    private String email;
}

主视图

@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();
    }
}

域名DTO

@Data
@AllArgsConstructor
public class DomainDTO {
    private DomainInfo domainInfo;
    private ContactInfo contactInfo;
    private List<HostInfo> hostInfo;
    private List<StatusInfo> statusInfo;


}

应用配置

@Configuration
public class AppConfig {
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

>您还需要在两个类 ContactInfo 和 DomainDTO 的@AllArgsConstructor之后添加注释@NoArgsConstructor

相关内容