JavaRESTClient-javax.ws.rs.ProcessingException:javax/xml/bind/annotation/XmlTransient

JavaRESTClient-javax.ws.rs.ProcessingException:javax/xml/bind/annotation/XmlTransient,java,rest,jax-rs,Java,Rest,Jax Rs,我正在使用Java1.7,并试图创建一个客户端来查询RESTAPI 但是,我在执行客户机时遇到以下错误。我在REST服务中设置了一个断点,但从未到达该断点 错误 javax.ws.rs.ProcessingException: javax/xml/bind/annotation/XmlTransient 问题 你知道我该怎么处理这个客户吗 代码 pom.xml <!-- JAX-RS 2.x Client RI --> <dependency>

我正在使用Java1.7,并试图创建一个客户端来查询RESTAPI

但是,我在执行客户机时遇到以下错误。我在REST服务中设置了一个断点,但从未到达该断点

错误

javax.ws.rs.ProcessingException: javax/xml/bind/annotation/XmlTransient
问题

你知道我该怎么处理这个客户吗

代码

pom.xml

    <!-- JAX-RS 2.x Client RI -->
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
    </dependency>
该服务仅供参考,因为我确信错误是由于客户端的错误造成的

Service.java(带Java14的Springboot)

@PostMapping(value=“/rest/approvalstatus/{evaluationRequestId}”,consumes=MediaType.APPLICATION\u JSON\u value,products={MediaType.APPLICATION\u JSON\u value,MediaType.APPLICATION\u XML\u value})
public@ResponseBody ResponseEntity getStatus(@PathVariable String evaluationRequestId,@RequestBody EvaluationProviderNotificationDTO ProviderNotificationDTO){
StatusDTO status=新StatusDTO();
status.setEvaluationRequestId(evaluationRequestId);
if(providedNotificationDTO.Output==评估providedNotificationDTO.Evaluation.Approved){
if(待定审批(evaluationRequestId)){
status.setStatus(StatusDTO.status.Wait);
}否则{
status.setStatus(StatusDTO.status.procedue);
}
}否则{
status.setStatus(StatusDTO.status.Wait);
}
返回ResponseEntity.ok(状态);
}
这是要发布的对象:

EvaluationProviderNotificationDTO.java

import javax.ws.rs.BadRequestException;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

private static final String approvalSubmitUrl = "http://localhost:8081/rest/approvals-status/{evaluationRequestId}";

public Object getStatus(String evaluationRequestId, EvaluationProvidedNotification providedNotification) {
    logger.info(approvalSubmitUrl);
    EvaluationProvidedNotificationDTO evaluationProvidedNotificationDTO = new EvaluationProvidedNotificationDTO();
    map(providedNotification, evaluationProvidedNotificationDTO);
    try {
        logger.info("Sending request to get status from " + approvalSubmitUrl + " (nexct-approval-service)");
        Client client = ClientBuilder.newClient();
        WebTarget target = client.target(approvalSubmitUrl);
        Response response = target.queryParam("evaluationRequestId", evaluationRequestId)
                .request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(evaluationProvidedNotificationDTO));
        StatusResponse statusResponse = response.readEntity(StatusResponse.class);
        logger.info("Successfully got the status: " + statusResponse.status );
    }
    catch (BadRequestException refused) {
        logger.error("Request to: " + approvalSubmitUrl + " REFUSED: " + refused.getMessage());
    }
    catch (Exception e) {
        logger.error("Failed to get status from " + approvalSubmitUrl, e);
    }
    return null;
}
public class EvaluationProvidedNotificationDTO {

    public enum Evaluation {
        Approved, Rejected;
    }

    //any contraints on the request for example cost constraints
    public List<Serializable> constraints;

    //the outcome of the evaluation
    public Evaluation outcome;

    //any messages that the evaluator wants to send to the requestor
    public String messageToRequestor;

    public List<Serializable> getConstraints() {
        return constraints;
    }

    public void setConstraints(List<Serializable> constraints) {
        this.constraints = constraints;
    }

    public Evaluation getOutcome() {
        return outcome;
    }

    public void setOutcome(Evaluation outcome) {
        this.outcome = outcome;
    }

    public String getMessageToRequestor() {
        return messageToRequestor;
    }

    public void setMessageToRequestor(String messageToRequestor) {
        this.messageToRequestor = messageToRequestor;
    }
}
public class evaluation提供通知给{
公共枚举评估{
批准、拒绝;
}
//请求中的任何约束,例如成本约束
公开名单限制;
//评价结果
公众评价结果;
//评估者想要发送给请求者的任何消息
公共字符串messageToRequestor;
公共列表getConstraints(){
回报约束;
}
公共void集合约束(列表约束){
这个约束=约束;
}
公众评价结果(){
返回结果;
}
公开结果(评估结果){
这个结果=结果;
}
公共字符串getMessageToRequestor(){
返回消息请求器;
}
public void setMessageToRequestor(字符串messageToRequestor){
this.messageToRequestor=messageToRequestor;
}
}

我通过将POJO转换为JSON解决了这个问题:

        Invocation.Builder builder = target.request();
        Gson gson = new Gson();
        String json = gson.toJson(evaluationProvidedNotificationDTO);
        Entity entity = Entity.entity(json, MediaType.APPLICATION_JSON_TYPE);
        Response response = builder.post(entity);
        StatusResponse statusResponse = response.readEntity(StatusResponse.class);

我通过将POJO转换为JSON解决了这个问题:

        Invocation.Builder builder = target.request();
        Gson gson = new Gson();
        String json = gson.toJson(evaluationProvidedNotificationDTO);
        Entity entity = Entity.entity(json, MediaType.APPLICATION_JSON_TYPE);
        Response response = builder.post(entity);
        StatusResponse statusResponse = response.readEntity(StatusResponse.class);

我认为问题可能与尝试将POJO转换为Json有关。使用
Entity.json(…
或媒体类型。但我不确定它应该是什么。我认为问题可能与尝试将POJO转换为json有关。使用
Entity.json(…
或媒体类型。但我不确定它应该是什么。