Как игнорировать значение @JsonProperty при использовании @RequestBody в контроллере для отображения значения в DTO - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу отобразить значение параметра HTTP-запроса непосредственно в DTO, ИСПОЛЬЗУЯ @JsonProperty на основе имени переменной, а не значения @JsonProperty. Я не могу сопоставить значение с DTO, потому что он ожидает значение запроса в соответствии с именем JsonProperty. Есть ли в любом случае отключить значение @JsonProperty при использовании @RequestBody?

JSON отправить по внешнему интерфейсу:

{
"userId":"1",
"payMethod":"payMethod"
}

MyDto.class publi c class MyDto {

    @JsonProperty(value = user_id, required = true)
    private String userId;


    @JsonProperty(value = BETAALMETHODE, required = true)
    private String payMethod;
//getter setter
   }

MyController.class

public class MyController{

  @RequestMapping(value = "payment", method = RequestMethod.PUT)
    public Integer PaymentUpdate(@RequestBody final MyDto myDto) throws JsonProcessingException {

}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Вы можете использовать JacksonMixin во время синтаксического анализа CSV:

public abstract class MyDtoMixin {
    @JsonProperty(value = user_id, required = true)
    private String userId;

    @JsonProperty(value = BETAALMETHODE, required = true)
    private String payMethod;
}


ObjectMapper mapper = new ObjectMapper(); // or CsvMapper mapper = new CsvMapper();
mapper.addMixInAnnotations(MyDto.class, MyDtoMixin.class);
0 голосов
/ 27 февраля 2020

Вы можете сделать это, используя метод множественного сеттера для этого метода DTO. Например,

Payload:
{
"userId":"1",
"payMethod":"payMethod"
}

затем

MyDto.class publi c class MyDto {

@JsonProperty(value = user_id, required = true)
    private String userId;


    @JsonProperty(value = BETAALMETHODE, required = true)
    private String payMethod;

добавить еще один установщик, относящийся к необходимому имени переменной в DTO class.

@JsonSetter("specifiedName")
void setUserId(String userId){
     this.userId=userId
}

void setPayMethod(String payMethod){ // Will work for "BETAALMETHODE" variable name
     this.payMethod=payMethod
}
@JsonSetter("payMethod")
void setPayMethod(String payMethod){
     this.payMethod=payMethod
}

Это решит ваши проблемы, и переменная payMethod назначит в обоих случаях.

...