Успешный ответ только для полей класса сущности - PullRequest
0 голосов
/ 06 августа 2020

Вот мой класс сущности

public class Tran{

   @Id
   @NotNull
   @Column(unique = true)
   private String tranId;

   private String code;

   private String failureReason;

   @NotNull
   private Date transaDate;

   private String switchingId
}

Это мой класс контроллера

public class TranController{
    @CrossOrigin(origins = "*")
    @PostMapping(value = "/pur", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Map<String,Object>> createTran(@RequestHeader(required = false,name="request-id") String requestId,
                                                @RequestHeader(required = false,name="datetime") String requestDate,
                                                @RequestHeader(required = false,name= "channel") String requestChannel,
                                                @RequestBody TransRequestEntity createTransactionRequest,
                                                HttpServletRequest req) throws ApiBaseException {



        Tran tran = objectMapper.convertValue(createTranRequest,Trans.class);

        TransCreateResponseEntity tranCreateResponseEntity = tranCreateService.createTransaction(tran,requestId);

        Map<String,Object> trResponse = responseEntityTransformer.transform(transactionCreateResponseEntity,transCreateResponseTransformer);

        switch (transactionCreateResponseEntity.getTransactionResponseHeader().getResponseCode()){
            case "00" :
                return ResponseEntity.status(HttpStatus.OK).body(trResponse);
            case "10" : return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(trResponse);
            default: return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(trResponse);
        }
    }
}

Я отправляю этот тип json

{
  "tranId": "120",
  "code": "50ac",
  "transaDate": "2020/02/20",
  "switchingId": "464vc",
}

Этот запрос показывает ответ успеха. нет проблем, но я отправляю такой запрос

{
  "tranId": "120",
  "code": "50ac",
  "transaDate": "2020/02/20",
  "switchingId": "464vc",
  "xyz" : "test"
}

это также показывает успешный ответ, но мне не нужно поле xyz, это поле также не в моем классе сущности .. Я хочу показать сообщение об ошибке типа «неверный запрос», если я добавляю другое поле, не входящее в класс сущности

Спасибо

1 Ответ

3 голосов
/ 06 августа 2020

Spring использует библиотеку Джексона. По умолчанию ObjectMapper, используемый фреймворком, устанавливает его FAIL_ON_UNKNOWN_PROPERTIES в false.

Поместите это в свой application.properties:

spring.jackson.deserialization.fail-on-unknown-properties=true

Он начнет давать сбой для нераспознанных свойств. Если вы используете sh для обработки исключения самостоятельно, вы можете сделать это с помощью

@ExceptionHandler(UnrecognizedPropertyException.class)

Подробнее здесь

...