Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法转换类型为';java.lang.String';到所需类型_Java_Spring_Hibernate - Fatal编程技术网

无法转换类型为';java.lang.String';到所需类型

无法转换类型为';java.lang.String';到所需类型,java,spring,hibernate,Java,Spring,Hibernate,我让SpringBoot2.2.1上的REST服务器使用SpringWeb5.2.3与mysql和JavaFX客户端连接。我想将http请求从客户端发送到服务器。对于方法GET来说效果很好,但是对于POST来说效果并不好 我的实体: @NoArgsConstructor @AllArgsConstructor @Getter @Entity(name = "CANDIDATES") public class Candidate { @Id @GeneratedValue(str

我让SpringBoot2.2.1上的REST服务器使用SpringWeb5.2.3与mysql和JavaFX客户端连接。我想将http请求从客户端发送到服务器。对于方法GET来说效果很好,但是对于POST来说效果并不好

我的实体:

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Entity(name = "CANDIDATES")
public class Candidate {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String lastname;

    @Enumerated(EnumType.STRING)
    private Education education;

    private String placeOfResidence;

    @ManyToMany(cascade = CascadeType.PERSIST)
    @JoinTable(
            name = "JOIN_VOTERESULTS_CANDIDATES",
            joinColumns = {@JoinColumn(name = "CANDIDATES_ID", referencedColumnName = "ID")},
            inverseJoinColumns = {@JoinColumn(name = "VOTERESULTS_ID",referencedColumnName = "ID")}
    )
    private List<VoteResult> voteResults;

    @ManyToOne
    @JoinColumn(name = "ELECTION_LISTS_ID")
    private ElectionList electionList;

    @ManyToOne
    @JoinColumn(name = "ELECTORAL_PARTIES_ID")
    private ElectoralParty electoralParty;
} 
以下是在客户端中创建此对象并向服务器发送POST请求的方法:

RestTemplate restTemplate = new RestTemplate();

restTemplate.setMessageConverters(getMessageConverters());

URI url = UriComponentsBuilder.fromHttpUrl(URL + "/createCandidate")
    .queryParam("id", candidate.getId())
    .queryParam("name", candidate.getName())
    .queryParam("lastname", candidate.getLastname())
    .queryParam("education", candidate.getEducation())
    .queryParam("placeOfResidence", candidate.getPlaceOfResidence())
    .queryParam("voteResults", candidate.getVoteResults())
    .queryParam("electionList", candidate.getElectionList())
    .queryParam("electoralParty", candidate.getElectoralParty()).build().encode().toUri();

restTemplate.postForObject(url, null, Candidate.class);
当我删除带有ElectorParty、electionList和voteResults的queryParams时,一切都很好。但是使用这些参数,我在服务器中出现了错误:

Field error in object 'candidateDto' on field 'education': rejected value [zawodowe]; codes [typeMismatch.candidateDto.education,typeMismatch.education,typeMismatch.com.pk.electionappserver.domain.Education,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [candidateDto.education,education]; arguments []; default message [education]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.pk.electionappserver.domain.Education' for property 'education'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [com.pk.electionappserver.domain.Education] for value 'zawodowe'; nested exception is java.lang.IllegalArgumentException: No enum constant com.pk.electionappserver.domain.Education.zawodowe]
Field error in object 'candidateDto' on field 'electionList': rejected value []; codes [typeMismatch.candidateDto.electionList,typeMismatch.electionList,typeMismatch.com.pk.electionappserver.domain.dto.ElectionListDto,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [candidateDto.electionList,electionList]; arguments []; default message [electionList]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.pk.electionappserver.domain.dto.ElectionListDto' for property 'electionList'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.pk.electionappserver.domain.dto.ElectionListDto' for property 'electionList': no matching editors or conversion strategy found]
Field error in object 'candidateDto' on field 'electoralParty': rejected value []; codes [typeMismatch.candidateDto.electoralParty,typeMismatch.electoralParty,typeMismatch.com.pk.electionappserver.domain.dto.ElectoralPartyDto,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [candidateDto.electoralParty,electoralParty]; arguments []; default message [electoralParty]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.pk.electionappserver.domain.dto.ElectoralPartyDto' for property 'electoralParty'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.pk.electionappserver.domain.dto.ElectoralPartyDto' for property 'electoralParty': no matching editors or conversion strategy found]
Field error in object 'candidateDto' on field 'voteResults': rejected value []; codes [typeMismatch.candidateDto.voteResults,typeMismatch.voteResults,typeMismatch.java.util.List,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [candidateDto.voteResults,voteResults]; arguments []; default message [voteResults]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.List' for property 'voteResults'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.pk.electionappserver.domain.dto.VoteResultDto' for property 'voteResults[0]': no matching editors or conversion strategy found]]
客户端中的错误:

Caused by: org.springframework.web.client.HttpClientErrorException$BadRequest: 400 : [{"timestamp":"2020-01-17T16:17:45.333+0000","status":400,"error":"Bad Request","errors":[{"codes":["typeMismatch.candidateDto.education","typeMismatch.education","typeMismatch.com.pk.electionappserver... (3565 bytes)]
    at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:101)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:170)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:112)
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:785)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:743)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:717)
    at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:443)
    at com.pk.electionappclient.Controller.ClientController.createCandidate(ClientController.java:36)
    at com.pk.electionappclient.Controller.ClientController.addCandidate(ClientController.java:84)
    at com.pk.electionappclient.Controller.admin.NewCandidateController.createNewCandidate(NewCandidateController.java:116)
VoteResult实体:

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Entity(name = "VoteResults")
public class VoteResult {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "USERS_ID")
    private User user;

    @ManyToOne
    @JoinColumn(name = "ELECTIONS_ID")
    private Election election;

    @ManyToMany(cascade = CascadeType.PERSIST)
    @JoinTable(
            name = "JOIN_VOTERESULTS_CANDIDATES",
            joinColumns = {@JoinColumn(name = "VOTERESULTS_ID",referencedColumnName = "ID")},
            inverseJoinColumns = {@JoinColumn(name = "CANDIDATES_ID", referencedColumnName = "ID")}
    )
    private List<Candidate> candidates;

    private LocalDateTime voteTime;
}
@noargsconstuctor
@AllArgsConstructor
@吸气剂
@实体(name=“VoteResults”)
公共类VoteResult{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@许多酮
@JoinColumn(name=“USERS\u ID”)
私人用户;
@许多酮
@JoinColumn(name=“选举ID”)
非公开选举;
@ManyToMany(cascade=CascadeType.PERSIST)
@可接合(
name=“加入候选人”,
joinColumns={@JoinColumn(name=“VOTERESULTS_ID”,referencedColumnName=“ID”)},
inverseJoinColumns={@JoinColumn(name=“CANDIDATES\u ID”,referencedColumnName=“ID”)}
)
私人名单候选人;
私有LocalDateTime voteTime;
}
选举名单实体:

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Entity(name = "ELECTION_LISTS")
public class ElectionList {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String description;

    @ManyToOne
    @JoinColumn(name = "ELECTION_ID")
    private Election election;

    @ManyToOne
    @JoinColumn(name = "CONSTITUENCY_ID")
    private Constituency constituency;

    @OneToMany(
            targetEntity = Candidate.class,
            mappedBy = "electionList",
            cascade = CascadeType.PERSIST,
            fetch = FetchType.LAZY
    )
    private List<Candidate> candidates;
}
@noargsconstuctor
@AllArgsConstructor
@吸气剂
@实体(名称=“选举名单”)
公共班级选举名单{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有字符串名称;
私有字符串描述;
@许多酮
@JoinColumn(name=“ELECTION\u ID”)
非公开选举;
@许多酮
@JoinColumn(name=“选区ID”)
私人选区;
@独身癖(
targetEntity=Candidate.class,
mappedBy=“electionList”,
cascade=CascadeType.PERSIST,
fetch=FetchType.LAZY
)
私人名单候选人;
}
选民党实体:

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Entity(name = "ELECTORAL_PARTIES")
public class ElectoralParty {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String description;

    @OneToMany(
            targetEntity = Candidate.class,
            mappedBy = "electoralParty",
            cascade = CascadeType.PERSIST,
            fetch = FetchType.LAZY
    )
    private List<Candidate> candidates;

    @OneToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @JoinColumn(name = "ELECTORAL_PROGRAMMES_ID")
    private ElectoralProgramme electoralProgramme;
}
@noargsconstuctor
@AllArgsConstructor
@吸气剂
@实体(名称=“选举方”)
公营选举党{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有字符串名称;
私有字符串描述;
@独身癖(
targetEntity=Candidate.class,
mappedBy=“选民党”,
cascade=CascadeType.PERSIST,
fetch=FetchType.LAZY
)
私人名单候选人;
@OneToOne(cascade=CascadeType.PERSIST,fetch=FetchType.LAZY)
@JoinColumn(name=“选举计划ID”)
私人选举程序选举程序;
}
  • 添加@RequestBody和@Valid
  • 查询参数将不起作用,因为它将以字符串形式传递值,这就是为什么会出现强制转换错误。这将传递对象为object@137462. 看看这个

  • 你能分享你的dto代码吗?还有您的其他实体代码。消息非常清楚:您发送一个参数,这个参数是一个字符串,Spring应该(例如)从该字符串创建一个ElectionListDto。它是怎么做到的?添加了这些实体的其余部分。我是否应该在控制器中将ObjectMapper从字符串添加到对象?
    @NoArgsConstructor
    @AllArgsConstructor
    @Getter
    @Entity(name = "ELECTORAL_PARTIES")
    public class ElectoralParty {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        private String name;
    
        private String description;
    
        @OneToMany(
                targetEntity = Candidate.class,
                mappedBy = "electoralParty",
                cascade = CascadeType.PERSIST,
                fetch = FetchType.LAZY
        )
        private List<Candidate> candidates;
    
        @OneToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
        @JoinColumn(name = "ELECTORAL_PROGRAMMES_ID")
        private ElectoralProgramme electoralProgramme;
    }