Объект проверки с вложенным полем ссылочного типа возвращает FeignException

У меня проблема с пользовательским валидатором.

Проект был реализован на основе весеннего ботинка и netflix feign client

У меня мало веб-сервисов:

1) полный рабочий день

@RestController
@RequestMapping(value = "/fullApp/{fullAppId}/person")
public class FullAppPersonController  extends CrudController<FullAppPerson> implements FullAppPersonServiceApi {

    @Autowired
    private FullAppPersonService personService;

    @Autowired
    private Validator validator;

    @Override
    @PutMapping(value = "/list")
    public Collection<FullAppPerson> updateFullAppPersonList(@PathVariable(value = "id") Long id, @RequestBody Collection<FullAppPerson> fapList) {
        validateCollectionFullAppPerson(fapList, Update.class);
        return personService.updateFullAppPersonList(id, fapList);
    }


    private void validateCollectionFullAppPerson(Collection<FullAppPerson> fullAppPersonList, Class<?>... validationGroups){
        Set<ConstraintViolation<FullAppPerson>> violations = new HashSet<>();
        fullAppPersonList.forEach(fullAppPerson -> violations.addAll(validator.validate(fullAppPerson, validationGroups)));
        if (!violations.isEmpty()) {
            throw new FullAppPersonValidationException("List is not passed validation:", violations);
        }
    }

/**other code***/
}

DTO FullAppPerson:

public class FullAppPerson {

    @NotNull(message = "Person is empty")
    @Valid
    private Person person;

    /**other field*/
    /*constructors and ALL getters and setters*/ 
}

2) персональное обслуживание

Пользователь DTO:

public class Person {

    private Long partnerId;

    @InnValidation(groups = {Create.class, Update.class})
    private String inn;
}

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

в случае, когда контроллер получает действительный объект - это нормально. в случае, если получение персонального сервиса недействительно - я получаю следующее сообщение:

{
    "timestamp": "2018-07-27",
    "status": 500,
    "error": "Internal Server Error",
    "exception": "java.lang.RuntimeException",
    "message": "person-service conection is failed feign.FeignException: status 500 reading PersonServiceApi#update(Long,Person); content:
{"notifications":[{"notificationCode":"ER_UNSPECIFIED","notificationMessage":"validation exception","notificationType":"ERROR","notificationDetails":{"complexMessage":"JSR-303 validated property 'inn.inn' does not have a corresponding accessor for Spring data binding - check your DataBinder's configuration (bean property versus direct field access)"}}],"hasErrors":true,"data":{"requestUrl":"http://13.234.23.168:8080/person/592","method":"PUT","exceptionName":"java.lang.IllegalStateException","causesMessages":["JSR-303 validated property 'inn.inn' does not have a corresponding accessor for Spring data binding - check your DataBinder's configuration (bean property versus direct field access)","Invalid property 'inn.inn' of bean class [com.ps.dto.Person]: Bean property 'inn.inn' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?"]}}",
    "path": "/fullApp/240/person/list"
}

Пожалуйста, помогите мне понять это поведение

(Я думаю, что если вложенный класс из службы 3party возвращает набор ограничений ограничений, я получаю ошибку.)

java,spring,validation,custom-validators,netflix-feign,

0

Ответов: 0

Объект проверки с вложенным полем ссылочного типа возвращает FeignException

У меня проблема с пользовательским валидатором.

Проект был реализован на основе весеннего ботинка и netflix feign client

У меня мало веб-сервисов:

1) полный рабочий день

@RestController
@RequestMapping(value = "/fullApp/{fullAppId}/person")
public class FullAppPersonController  extends CrudController<FullAppPerson> implements FullAppPersonServiceApi {

    @Autowired
    private FullAppPersonService personService;

    @Autowired
    private Validator validator;

    @Override
    @PutMapping(value = "/list")
    public Collection<FullAppPerson> updateFullAppPersonList(@PathVariable(value = "id") Long id, @RequestBody Collection<FullAppPerson> fapList) {
        validateCollectionFullAppPerson(fapList, Update.class);
        return personService.updateFullAppPersonList(id, fapList);
    }


    private void validateCollectionFullAppPerson(Collection<FullAppPerson> fullAppPersonList, Class<?>... validationGroups){
        Set<ConstraintViolation<FullAppPerson>> violations = new HashSet<>();
        fullAppPersonList.forEach(fullAppPerson -> violations.addAll(validator.validate(fullAppPerson, validationGroups)));
        if (!violations.isEmpty()) {
            throw new FullAppPersonValidationException("List is not passed validation:", violations);
        }
    }

/**other code***/
}

DTO FullAppPerson:

public class FullAppPerson {

    @NotNull(message = "Person is empty")
    @Valid
    private Person person;

    /**other field*/
    /*constructors and ALL getters and setters*/ 
}

2) персональное обслуживание

Пользователь DTO:

public class Person {

    private Long partnerId;

    @InnValidation(groups = {Create.class, Update.class})
    private String inn;
}

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

в случае, когда контроллер получает действительный объект - это нормально. в случае, если получение персонального сервиса недействительно - я получаю следующее сообщение:

{
    "timestamp": "2018-07-27",
    "status": 500,
    "error": "Internal Server Error",
    "exception": "java.lang.RuntimeException",
    "message": "person-service conection is failed feign.FeignException: status 500 reading PersonServiceApi#update(Long,Person); content:
{"notifications":[{"notificationCode":"ER_UNSPECIFIED","notificationMessage":"validation exception","notificationType":"ERROR","notificationDetails":{"complexMessage":"JSR-303 validated property 'inn.inn' does not have a corresponding accessor for Spring data binding - check your DataBinder's configuration (bean property versus direct field access)"}}],"hasErrors":true,"data":{"requestUrl":"http://13.234.23.168:8080/person/592","method":"PUT","exceptionName":"java.lang.IllegalStateException","causesMessages":["JSR-303 validated property 'inn.inn' does not have a corresponding accessor for Spring data binding - check your DataBinder's configuration (bean property versus direct field access)","Invalid property 'inn.inn' of bean class [com.ps.dto.Person]: Bean property 'inn.inn' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?"]}}",
    "path": "/fullApp/240/person/list"
}

Пожалуйста, помогите мне понять это поведение

(Я думаю, что если вложенный класс из службы 3party возвращает набор ограничений ограничений, я получаю ошибку.)

00Java, весна, проверка, таможенно-валидаторы, Netflix-симулировать,
Похожие вопросы