【发布时间】:2016-12-26 10:46:15
【问题描述】:
下面是wsimport生成的类-(注意getter名字getOProposalData())-
public class UpdateProposalRequest {
protected ObjProposalData oProposalData;
public ObjProposalData getOProposalData() {
return oProposalData;
}
public void setOProposalData(ObjProposalData value) {
this.oProposalData = value;
}
}
我正在尝试使用 com.fasterxml.jackson.core (jackson-databind) 中的 ObjectMapper 将字符串转换为上述类的对象-
private ObjectMapper mapper = new ObjectMapper();
UpdateProposalRequest requestObject = mapper.readValue(requestStr, UpdateProposalRequest.class);
requestStr 具有以下 JSON -
{
"oProposalData": {
.
.
.
}
}
当我运行应用程序时,它会抛出以下异常 - (注意 - 已知属性名称 - oproposalData) -
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "oProposalData" (class co.xxx.service.updateproposal.UpdateProposalRequest), not marked as ignorable (one known property: "oproposalData"])
经过一番摸索后,我发现问题出在从 wsimport 生成的 getter 名称上。如果我把它改成getoProposalData(),那么上面的异常就不会抛出了。
以下是我能想到的解决此问题的两种解决方法 -
对于每个 getter 方法,为 ObjectMapper 添加以下注释以选择正确的字段名称 -
@JsonProperty("oProposalData")使用 wsimport 生成类文件后,使用 Eclipse 之类的 IDE 自动生成 getter 和 setter。 (Eclipse 将生成与 ObjectMapper 格式匹配的正确格式的 getter)。
这些方法的问题是我有数百个具有多个字段的此类文件。所以手动添加注解或者生成getter和setter会花费很多时间。此外,对 WSDL 文件的任何微小更改都将导致重新生成类文件并再次手动更改 getter 名称。
有没有办法在生成类文件时控制 getter/setter 名称格式?
或者有没有办法在调用 readValue/writeValue 时向 ObjectMapper 提供 getter 格式?
更新 -
我发现通过扩展PropertyNamingStrategy,我们将能够提供我们自己的转换策略。但我无法为上述情况正确转换。链接——Link
谁能提供上述案例所需的确切转化策略?
【问题讨论】:
标签: java json web-services jackson wsimport