Ниже приведен класс, сгенерированный wsimport — (Примечание getter name getOProposalData()
) —
public class UpdateProposalRequest {
protected ObjProposalData oProposalData;
public ObjProposalData getOProposalData() {
return oProposalData;
}
public void setOProposalData(ObjProposalData value) {
this.oProposalData = value;
}
}
Я пытаюсь преобразовать преобразовать строку в объект вышеуказанного класса с помощью ObjectMapper из com.fasterxml.Джексон.core (jackson-databind) —
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. Если я изменю его наgetoProposalData()
, то вышеуказанное исключение не будет выдано.
Ниже приведены 2 обходных пути, которые я мог бы придумать для этой проблемы —
Для каждого метода геттера добавьте приведенную ниже аннотацию для ObjectMapper, чтобы выбрать правильное имя поля —
@JsonProperty("oProposalData")
После создания файла класса с помощью wsimport используйте IDE, такую как eclipse, для автоматического создания геттеров и сеттеров. (Eclipse создаст геттер с соответствующим форматом, который соответствует формату ObjectMapper).
Проблема с этими методами в том, что у меня есть сотни таких файлов класса, имеющих несколько полей. Поэтому добавление аннотации вручную или создание геттеров и сеттеров займет много времени. Кроме того, любое небольшое изменение файла WSDL приведет к регенерации файлов класса и повторному изменению имен геттера вручную.
Существует ли способ управления форматом имени getter / setter при создании файлов класса?
Или есть способ предоставить формат getter Объектмапперу при вызове readValue / writeValue?
Обновить —
Я обнаружил , что, расширяяPropertyNamingStrategy
, мы сможем обеспечить нашу собственную конверсионную стратегию. Но я не могу получить преобразование правильно для вышеуказанного случая. Link — Link
Может ли кто — нибудь предоставить точную стратегию преобразования, необходимую в вышеуказанном случае?
Я получил его работу с помощью PropertyNamingStrategy, как показано ниже —
Использование вышеуказанного объекта класса как показано ниже —