gpt4 book ai didi

java - Rest Easy Client Framework 值在解码后丢失

转载 作者:行者123 更新时间:2023-12-01 05:53:01 25 4
gpt4 key购买 nike

昨天我尝试使用 RestEasy 框架的客户端。该接口(interface)有一个方法:

@PUT
@Path("document/autoincrement")
@Consumes("application/xml")
BaseClientResponse<String> insertPointOfInterest(PoiDocument poiDocument);

对某些( Jersey )休息服务的调用如下所示:

    String restServerServiceUrl = "http://my.jersey.server/rest/serviceFoo/v1/";
NSSClientService client = ProxyFactory.create(NSSClientService.class, restServerServiceUrl);

PoiDocument poiDocument = new PoiDocument("Parkirišče", "90", 390262.85133115170, 42240.33558245482);

BaseClientResponse<String> response = client.insertPointOfInterest(poiDocument);
assert response.getResponseStatus() == Response.Status.OK;

// Expected result
//<?xml version="1.0" encoding="UTF-8" standalone="yes"?><insertedRecord><record>14</record></insertedRecord>

logger.info("Returned: " + response.getEntity());

记录器打印:

14

有点预期。

但我想要一个对象而不是字符串,因此我可以轻松断言返回的值。界面:

@PUT
@Path("document/autoincrement")
@Consumes("application/xml")
BaseClientResponse<InsertedResponse> insertPointOfInterest(PoiDocument poiDocument);

现在不再是 String,而是一个 InsertedResponse 类,如下所示:

@XmlRootElement(name="insertedRecord")
public class InsertedResponse extends ResponseResult{

String insertedRecord;

public InsertedResponse(int insertedRecord) {
this.insertedRecord = Integer.toString(insertedRecord);
}

public InsertedResponse(){
insertedRecord = "";
}

@XmlElement(name="record")
public String getInsertedRecords(){
return insertedRecord;
}

public void add(int recNo) {
insertedRecord = Integer.toString(recNo);
}
}

...及其父类(super class):

@XmlRootElement(name = "result")
public abstract class ResponseResult {

protected String getClearString(String string) {

if (string != null) {
return Constants.removeInvalidXMLCharacters(string);

}
return "";
}
}

现在,当我将客户端调用更改为:

    BaseClientResponse<InsertedResponse> response = client.insertPointOfInterest(poiDocument);
logger.info("Returned: " + response.getEntity().getInsertedRecords());

我得到一个空字符串而不是某个值。

那么,问题来了——值(value)去哪儿了?它应该打印一个数字,如上例中的 14。

最佳答案

缺少一个 JAXB 注释 (@XmlSeeAlso)

@XmlRootElement(name = "result")
@XmlSeeAlso( { InsertedResponse.class, OtherChild.class, SomeOtherChild.class })
public abstract class ResponseResult {

...
}

以及添加的 setter 方法

@XmlRootElement(name="insertedRecord")
public class InsertedResponse extends ResponseResult{

...

public void setInsertedRecords(String insertedRecord) {
this.insertedRecord = insertedRecord;
}

解决了问题。

关于java - Rest Easy Client Framework 值在解码后丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3995033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com