Как проверить сопоставленные сущности Spring-Boot - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь проверить следующую схему с помощью Spring Validator:

@RestController
@RequestMapping("/bankcode-service")
@Validated
public class BankcodeController {

@Autowired
Delegator delegator;
@Autowired
Delegator delegator;

@Autowired
BankcodeRepository bankcodeRepository;

@DeleteMapping(path = "/bankcode", consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public DeferredResult<ResponseEntity<String>> lock(@Valid HttpEntity<BankcodeJSONEntity> httpEntity) {

    DeferredResult<ResponseEntity<String>> response = new DeferredResult<>();
    if (httpEntity.getBody() == null) {
        response.setResult(new ResponseEntity<>("The request was empty!", HttpStatus.BAD_REQUEST));
        return response;
    }
    response.setResult(delegator.delegateUseCase(new LockBankcodeProd(bankcodeRepository, httpEntity.getBody())));
    return response;
}

Используемый DTO выглядит так:

@Data
public class BankcodeJSONEntity {

@NotNull
@Size(min = 8, max = 8)
private String bankcode;
@NotNull
@Size(min = 11, max = 11)
private String bic;
@NotNull
private String ticket;

@Basic
@Temporal(TemporalType.DATE)
@NotNull
private Date date;
@NotNull
private String category;
@NotNull
private String name;

}

Но неважно, если я передам:

{"bankcode":"00000000", "bic":"AAAAAAAAAAA", "ticket":"SPOC-000000", "date":"2020-01-17", "category":"Fusion", "name":"Fantasiebank"}

Или недопустимый:

{"bankcode":"21750000", "bic":"AAAAAAAA", "ticket":"SPOC-000000", "date":"2020-01-17", "category":"Fusion", "name":"Fantasiebank"}

Нет исключения исключения ограничения. Во многих уроках я видел, что проверка в основном выполняется с помощью конкретных аргументов, а не DTO. Возможна ли проверка DTO, потому что у меня может быть только 7 аргументов конструктора до того, как SonarLint снизит качество моего кода.

Что я здесь не так делаю?

1 Ответ

1 голос
/ 21 января 2020

Пожалуйста, удалите HttpEntity из параметра. Измените ваш параметр как @Valid BankcodeJSONEntity entity. Потому что HttpEntity представляет HTTP-запрос или ответ, включая заголовки и тело, обычно используемые с RestTemplate. И для контроллера, обычно в качестве оболочки ответа.

public DeferredResult<ResponseEntity<String>> lock(@Valid BankcodeJSONEntityentity) {
...