当前位置: 首页 > 知识库问答 >
问题:

bean类[java.util.ArrayList]的无效属性'xyz':Bean属性'xyz'不可读或具有无效的getter方法

仲浩歌
2023-03-14

我是新来的Spring靴。我在基于javax的验证上遇到了麻烦。控制器期望从POSTendpoint获得json obj的列表。在JSON请求json数组中,如果引擎name为空,我得到正确的400错误。但是,当engine.typeengine.name为空时,它会抛出500个带有错误消息的异常:

Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'engine' of bean class 
[java.util.ArrayList]: Bean property 'engine' is not readable or has an invalid 
getter method: Does the return type of the getter match the parameter type of 
the setter?

控制器。JAVA

@RestController
@Validated
public class CarController {
  @PostMapping(path = "/cars")
  public ResponseEntity<PostModelResponse> createModel(
          @Valid @RequestBody ArrayList<Car> cars)
          throws JSONException, ConstraintViolationException {
          ...
      return new ResponseEntity<>(response, HttpStatus.CREATED);
  }
}

汽车JAVA

class Car {
  @NotNull
  @Valid
  private Engine engine;

  @NotNull
  private String name;

  Cars(Engine engine, String name) {
    this.engine = engine;
    this.name = name;
  }

  public String getName(){ return name; }
  public void setName(String name) { this.name = name;}
  public Engine getEngine() { return engine; }
  public void setEngine(Engine engine){ this.engine = engine; }

}

Engine.java

class Engine {
  @NotNull
  private String type;
  @NotNull
  private String name;

  Engine(String type, String name) {
    this.type = type;
    this.name = name;
  }
  public String getType() { return type; }
  public void setType(String type) { this.type = type; }
  public String getName() { return name; }
  public void setName(String name) { this.name = name;}
}

CollectionValidator。JAVA

public class CollectionValidator implements Validator {

    private final Validator validator;

    public CollectionValidator(LocalValidatorFactoryBean validator) {
        this.validator = validator;
    }

    @Override
    public boolean supports(Class<?> clazz) {
        return Collection.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        Collection col = (Collection) target;
        for ( Object obj : col ) {
            ValidationUtils.invokeValidator(validator, obj, errors);
        }
    }
}

验证者Advice.java

@ControllerAdvice
public class ValidatorAdvice {

    @Autowired
    protected LocalValidatorFactoryBean validator;

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.initDirectFieldAccess();
        binder.addValidators(new CollectionValidator(validator));
    }
}

请求/响应:URL:http://localhost:8080/cars

>

答复:200(正常)

帖子正文:[{“引擎”:{“类型”:“v3”,“名称”:“沃尔沃引擎”}]

响应:400(由于缺少名称,预计为400)

帖子正文:[{“姓名”:“沃尔沃”}]

响应:400(由于发动机缺失,预计为400)

帖子正文:[{“名称”:“沃尔沃”,“引擎”:{“名称”:“沃尔沃引擎”}]

回复:500(我预期为400),错误:

引起原因:org.springframework.beans.NotReadableProperty tyExc0019:bean类[java.util.ArrayList]的无效属性'引擎':Bean属性'id'不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?

在发布这篇文章之前,我查看了其他stackOverflow结果。如果我接受Carobject而不是ArrayList,一切正常

非常感谢您的帮助。


共有1个答案

赵明亮
2023-03-14

验证程序处理bean,而不是列表;一种可能的解决方案是在列表属性上使用@Valid注释将列表包装在bean中:

public class MyList<E> {

    @Valid
    private List<E> list;

    public List<E> getList() {
        return list;
    }

    public void setList(List<E> list) {
        this.list = list;
    }
}

并在控制器中通过以下方式进行验证:

createModel(@Valid @RequestBody MyList<Car> cars)
 类似资料:
  • 我收到以下错误“bean类[java.util.ArrayList]的无效属性'username]:bean属性'username'不可读或具有无效的getter方法”。 虽然我有正确的表单bean,名称为username,但是我仍然收到了这个错误,你能帮我解决这个错误吗。。? 我的jsp页面在下面 下面提供了我的控制器

  • 我是Spring的新手,我有个例外。 我有一个jsp,有很多选择。它们都工作正常,但有一个显示了这个例外: 我正在以与其他工作正常的人相同的方式实施selct。下面是jsp代码: 这里是控制器: 这里,实体Expediente: 最后是TipoExpedinte实体 我认为这可能发生,因为PharmantePadre属性是同一实体Pharmante的外键,但我不知道如何解决它。。。 要帮忙吗?谢谢

  • 在“项目创建”视图中,我需要一个选择框,该框显示所有拥有类似Chef Projet的Rolename的用户 以下是Projet、Usilizateur最重要的摘录: 用户: 当提交表格时,被选中的用户将被分配到项目中。 Projets。jsp: 管理员控制器: 这是堆栈跟踪:

  • 因此,我有一个任务来编写一个简单的注册表路由Web应用程序。使用Spring MVC。所以我有“路线”类,在那里我想保留起点、终点和中间点列表。但是我不明白,如何把值从jsp列表(例如使用jstl)。所以我决定解析一个字符串。 并遵循JSP: 如果有必要,我可以发布控制器代码。我有一个错误: 谁能解释一下我做错了什么?

  • 谁能看看这个错误并帮助我吗?我花了两个小时去找问题,但我没有找到解决办法。列出数据是可行的,但问题是在使用action=“saveCategory添加jsp时。 org.springframework.beans.NotReadablePropertyException:bean类[java.util.ArrayList]的属性“category name”无效:bean属性“category n

  • 现在在用spring框架spring boot version = ' 1 . 5 . 9 . release '做java。但是每次我运行我的网络应用程序时 org.springframework.beans.NotReadable属性异常: bean类的无效属性'id'[java.util.ArrayList]: Bean属性'id'不可读或具有无效的getter方法:getter的返回类型是