Ниже приводится класс, порожденный wsimport - (обратите внимание на имя геттер getOProposalData()
) -wsimport генерироваться добытчика не работает в ObjectMapper
public class UpdateProposalRequest {
protected ObjProposalData oProposalData;
public ObjProposalData getOProposalData() {
return oProposalData;
}
public void setOProposalData(ObjProposalData value) {
this.oProposalData = value;
}
}
Я пытаюсь преобразовать преобразовать строку в объект выше класса с использованием ObjectMapper от ком .fasterxml.jackson.core (джексон-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 ObjectMapper при вызове readValue/writeValue?
Update -
Я обнаружил, что за счет расширения PropertyNamingStrategy
, мы сможем обеспечить нашу собственную стратегию преобразования. Но я не могу получить право на конвертацию для вышеуказанного случая. Ссылка - Link
Может ли кто-нибудь указать точную стратегию конверсии, необходимую в вышеуказанном случае?