Spring @RequestBody из интерфейса - PullRequest
0 голосов
/ 30 мая 2019

У меня есть классы, сгенерированные из файла .raml.В сгенерированном интерфейсе для контроллера у меня есть @RequestBody по моему параметру.Если я пытаюсь сделать запрос, отображение работает корректно, но каждый раз, когда в моем объекте есть нулевые поля, помеченные @RequestBody из параметров.Похоже, эта аннотация игнорируется.Как я могу заставить его работать из интерфейса.

Для тестирования без Raml я попытался создать простой интерфейс для контроллера с простой реализацией, и я все еще получаю значения нулевых полей в моем объекте запроса.

Интерфейс контроллера, сгенерированный из .raml

@RestController
@RequestMapping("/kbm")
public interface KbmController {

    @RequestMapping(value = "", method = RequestMethod.PUT)
    public ResponseEntity<KbmCalcResponse> updateKbm(
        @Valid
        @RequestBody
        KbmCalcRequest kbmCalcRequest);
}

Моя реализация

@Component
@RequiredArgsConstructor
public class CalcKbmControllerImpl implements KbmController {

  private final KbmService kbmService;

  @Override
  public ResponseEntity<KbmCalcResponse> updateKbm(KbmCalcRequest kbmCalcRequest) {
    System.out.println(kbmCalcRequest.getInsurerID());
    return ResponseEntity.ok(kbmService.calculate(kbmCalcRequest));
  }
}

Запрос модели, сгенерированной из .raml

public class KbmCalcRequest implements Serializable
{

    final static long serialVersionUID = 1692733266431420440L;

    private String insurerID;

    public KbmCalcRequest() {
        super();
    }


    public KbmCalcRequest(String insurerID {
        super();
        this.insurerID = insurerID;
    }

    public String getInsurerID() {
        return insurerID;
    }

    public void setInsurerID(String insurerID) {
        this.insurerID = insurerID;
    }

    public int hashCode() {
        return new HashCodeBuilder().append(insurerID).toHashCode();
    }

    public boolean equals(Object other) {
        if (other == null) {
            return false;
        }
        if (other == this) {
            return true;
        }
        if (this.getClass()!= other.getClass()) {
            return false;
        }
        KbmCalcRequest otherObject = ((KbmCalcRequest) other);
        return new EqualsBuilder().append(insurerID, otherObject.insurerID).isEquals();
    }

    public String toString() {
        return new ToStringBuilder(this).append("insurerID", insurerID).toString();
    }

}

1 Ответ

1 голос
/ 30 мая 2019

Проблема была в пружинном загрузчике стартера.Мы использовали старую версию spring-boot-starter-parent - 2.0.1.RELEASE, которая использовала весеннюю сеть 4.3.5.Но особенность наследования аннотаций от параметров метода к реализациям этих методов была добавлена ​​в 5.1.0. ПОЛУЧЕНИЕ весенней паутины.Итак, я только что поместил последнюю версию (2.1.5.RELEASE на данный момент) в мой файл pom, и это решило мою проблему.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
    <relativePath/>
</parent>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...