简体   繁体   English

无法将“java.lang.String”类型的值转换为所需类型

[英]Cannot convert value of type 'java.lang.String' to required type

I have REST server on Spring-boot 2.2.1 connected with mysql and JavaFX client using Spring-web 5.2.3.我在 Spring-boot 2.2.1 上有 REST 服务器,使用 Spring-web 5.2.3 与 mysql 和 JavaFX 客户端连接。 I would like to send http request from client to server.我想从客户端向服务器发送 http 请求。 For method GET works great, but for POST does not work good.对于方法 GET 效果很好,但对于 POST 效果不佳。

My entity:我的实体:

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

The CandidateDto has got the same variables. CandidateDto 具有相同的变量。 Here is my controller for POST:这是我的 POST 控制器:

@PostMapping(value = "/createCandidate")
public void createCandidate(@Valid CandidateDto candidateDto) {
    service.createCandidate(candidateDto);
}

Here is method for creating this object in client and send POST request with body to server:这是在客户端创建此对象并将带有正文的 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);

Everything works great when I delete queryParams with electoralParty, electionList and voteResults.But with these params I have errors in server:当我删除带有选举党、选举列表和投票结果的 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]]

And errors in client:和客户端错误:

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 entity:投票结果实体:

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

ElectionList entity:选举列表实体:

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

ElectoralParty entity:选举党实体:

@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;
}
  1. Add @RequestBody with @Valid使用@Valid 添加@RequestBody
  2. Query param will not work, because it will pass values as string that's why you are getting casting error.查询参数将不起作用,因为它会将值作为字符串传递,这就是您遇到强制转换错误的原因。 This will pass object as object@137462.这会将对象作为 object@137462 传递。 Check out this https://stackoverflow.com/a/36021268/4367186看看这个https://stackoverflow.com/a/36021268/4367186

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 嵌套异常是java.lang.IllegalStateException:无法将类型[java.lang.String]的值转换为所需类型 - nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type 无法将“java.lang.String”类型的值转换为所需类型“java.time.LocalDate” - Cannot convert value of type 'java.lang.String' to required type 'java.time.LocalDate' Java Spring MVC:IllegalStateException:无法将类型[java.lang.String]的值转换为必需的类型 - Java spring mvc: IllegalStateException: Cannot convert value of type [java.lang.String] to required type Spring安全性无法将类型[java.lang.String]的值转换为属性“secRole”所需的类型[SecRole] - Spring security cannot convert value of type [java.lang.String] to required type [SecRole] for property 'secRole' 无法将Spring Batch MongoItemReader上的属性的Query类型的值转换为所需的类型&#39;java.lang.String&#39; - Cannot convert value of type Query to required type 'java.lang.String' for property on Spring Batch MongoItemReader Spring Forms绑定异常-IllegalStateException:无法将[java.lang.String]类型的值转换为所需的类型 - Spring Forms Bind Exception - IllegalStateException: Cannot convert value of type [java.lang.String] to required type Spring表单绑定怎么做? 无法将[java.lang.String]类型的值转换为所需类型 - Spring form binding how to do it ? Cannot convert value of type [java.lang.String] to required type 无法将类型&#39;java.lang.String&#39;的属性值转换为所需的类型,列不能为null,转换器 - Failed to convert property value of type 'java.lang.String' to required type, Column cannot be null, converter 无法将“ java.lang.String”的值转换为所需的类型“ myEnum” - Failed to convert value of 'java.lang.String' to required type 'myEnum' spring 无法将“java.lang.String”类型的值转换为所需的“java.lang.reflect.Type”类型 - spring failed to convert value of type 'java.lang.String' to required type 'java.lang.reflect.Type'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM