代码之家  ›  专栏  ›  技术社区  ›  Endriyas

bean类的属性“id”无效:bean属性“id”不可读或具有无效的getter方法:getter的返回类型是否匹配

  •  0
  • Endriyas  · 技术社区  · 6 年前

    现在,我正在使用spring框架spring boot版本='1.5.9开发java。发布'。但每次我运行我的web应用程序

    组织。springframework。豆子。NotReadablePropertyException:bean类的属性“id”无效[java.util.ArrayList]:bean属性“id”不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配? 位于组织。springframework。豆子。抽象NestablePropertyAccessor。getPropertyValue(AbstractNestablePropertyAccessor.java:631)~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 位于组织。springframework。豆子。抽象NestablePropertyAccessor。getPropertyValue(AbstractNestablePropertyAccessor.java:622)~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 位于组织。springframework。网状物servlet。支持BindStatus。(BindStatus.java:149)~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] 位于组织。百里香叶。spring4.util。FieldUtils。getBindStatusFromParsedExpression(FieldUtils.java:401)~[thymeleaf-spring4-2.1.6.RELEASE.jar:2.1.6.RELEASE]

    我的用户类是

    import javax.persistence.Entity;
    import javax.persistence.Id;
    
    @Entity
    public class User {
    
    @Id
    private int id;
    private String name;
    private int age;
    
    public User() {
    }
    
    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    }
    

    我的控制器类是

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import java.util.List;
    
    @Controller
    public class UserController {
    
    @Autowired
    private UserService userService;
    
    @RequestMapping(value = "/")
    public String display(ModelMap modelMap){
        User user = new User(1, "Endriyas", 21);
        userService.addUser(user);
        List<User> users = userService.getAllUser();
        modelMap.put("users", users);
        return "users";
    }
    
    }
    

    我的HTML表单是

    <div>
        <form action="#" th:action="@{/}" th:object="${users}" method="post">
            <div>
                <label>
                    <span>ID</span>
                </label>
                <input type="number" th:field="*{id}"/>
            </div>
            <div>
                <label>
                    <span>Name</span>
                </label>
                <input type="text" th:field="*{name}"/>
            </div>
            <div>
                <label>
                    <span>Age</span>
                </label>
                <input type="number" th:field="*{age}"/>
            </div>
            <div>
                <button type="submit" name="save">SAVE</button>
            </div>
        </form>
    </div>
    

    我需要帮助

    谢谢

    1 回复  |  直到 3 年前
        1
  •  1
  •   Periklis Douvitsas    6 年前

    您正在传递一个用户列表(在控制器中),但实际上是以要保存一个用户的形式传递的。

    为了显示新创建的用户(使用默认值)

    将代码更改为

     @RequestMapping(value = "/")
    public String display(ModelMap modelMap){
        User user = new User(1, "Endriyas", 21);
        userService.addUser(user);
        User users = userService.getById(1);
        modelMap.put("users", users);
        return "users";
    }
    

    此外,您应该在服务中创建一个新方法

    getById (that has an Integer as a parameter)
    

    addUser方法是否将用户保存在数据库中? 如果不是,您只想用一些默认值显示用户 将代码更改为

    @RequestMapping(value = "/")
        public String display(ModelMap modelMap){
            User user = new User(1, "Endriyas", 21);
            modelMap.put("users", user);
            return "users";
        }