Bean 属性“xxx”不可读或具有无效的 getter 方法:getter 的返回类型是否与 setter 的参数类型匹配?

问题描述 投票:0回答:5

我不断收到此错误,现在我不知道为什么。

引起:org.springframework.beans.NotReadablePropertyException:bean类[java.util.ArrayList]的无效属性“所有者”:Bean属性“所有者”不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配吗?

我尝试过使用

th:field="*{owner}"

th:field="*{Owner}"

th:field="*{setOwner}"
但仍然遇到同样的错误。

控制器

@RequestMapping("/wqrms/customer/create")
public String customerCreate(Model model) {
    List<Customer> customer = customerService.listAll();
    model.addAttribute("customer", customer);
    return "/views/wqrms/customer/create";
}

型号

@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String owner;
public long getId() { 
    return id; 
}
public void setId(long id) {
    this.id = id; 
}
public String getOwner() { 
    return owner; 
}
public void setOwner(long id) {
    this.owner = owner; 
}
}

百里香叶

<form action="#" th:action="@{/wqrms/customer/save}" th:object="${customer}" method="post">     
        <div class="form-row">
            <div class="form-group col-md-6">
                <label>Customer Name</label> 
                <input class="form-control" placeholder="Customer Name" required th:field="*{owner}">
            </div>
java html spring spring-boot thymeleaf
5个回答
1
投票

您错误地编写了 getOwner 的代码。所有者的数据类型是字符串,并且您已将方法声明为 long。 请将代码重写为以下内容。

public String getOwner() { 
return owner; 
}

提示 - 编码时使用 IDE,它将帮助您轻松找出这些编译时错误。


1
投票

您在为实体类创建 Getter 和 Setter 时犯了错误。以及您的程序如何成功编译。因为里面

public long getOwner() { 
    return owner; 
}

使用 long 作为返回类型但从 getter 返回 String 的方法。 像这样重写你的类

@Entity
public class Customer {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String owner;

public long getId() { 
    return id; 
}
public void setId(long id) {
    this.id = id; 
}
public String getOwner() { 
    return owner; 
}
public void setOwner(String owner) {
    this.owner = owner; 
}
}

或者您可以选择任何 IDE 例如:Eclipse、IntelliJ 来编写类。


0
投票

问题已解决!该控制器应该用于列出客户。改成

`@RequestMapping("/wqrms/customer/create")
 public String customerCreate(Model model) {
     Customer customer = new Customer();
     model.addAttribute("customer", customer);
     return "/views/wqrms/customer/create";
}`

谢谢大家!


0
投票

我无法解释它是如何工作的,但这就是我改变的。我的 getter 方法是

public int getMaximumInv()
我将其重命名为
public int getMaximuminv()
。错误消失了。


-1
投票

POJO 中的 getter/setter 不正确。

为什么要使代码更具可读性的经典示例。

发生这种情况是因为不必要的样板冗余代码。

使用 this-(LOMBOK) dependency/jar ,所有降低可读性的代码都将被删除。 Lombok 也是 spring-boot 启动器的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.