无法将类型 'java.lang.String' 的 属性 值转换为所需类型“[]”

Failed to convert property value of type 'java.lang.String' to required type '[]'

我有两个实体,它们使用主键相互引用,主键是来自一个实体的整数。我不确定我这样做是否正确。

以下是主键id为int的实体

@Entity
@Table(name="michango_kanda")
public class Kmichango  {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;


@OneToMany(cascade = CascadeType.ALL, mappedBy = "kandaMchango" )
private List<Jmichango> jumuiyaMichango = new ArrayList<>();

//Constructor,toString,getter and setter,.......}        

下面是我们将上述实体的外键设置为 Kmichango kandaMchango 的实体。

@Entity
@Table(name = "michango_jumuiya")
public class Jmichango  {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;

@ManyToOne
@JoinColumn(name = "kandamchangoID")
private Kmichango kandaMchango;

//Constructor,toString,getter and setter,.......}   

这是我在 jumuiya_michango_form.html

中提交用户提供的数据的部分表格
            <form  class="form-horizontal" method="POST" action="/save-michango-jumuiya"
             style="max-width: 600px; margin: 0 auto;" >
            <div class="control-group">
            <label class="control-label" for="kandaMchango">Code Ya Mchango</label>
            <div class="select">
             <select id="kandaMchango" name="kandaMchango" required="true">
                 <option value="none" selected disabled hidden > 
                     Chagua Code ya Mchango
                 </option> 
                 <th:block th:each="kanda : ${kandaMichango}">
                  <option th:each="text : ${kanda.id}" th:value="${text}" th:text="${text}" ></option>
                  </th:block>
                 </select>
             </div>
         </div>
           <input type="submit" value="Submit">
        </form>

下面是我的控制器用于 link 表单和 post 数据的两种方法

@GetMapping("/michango/jumuiya/add")
public String addJumuiyaMichango(Model model){
 List<Kmichango> kandaMichango = kMichangoRepository.findAll();
 List<Jumuiya> jumuiya =  jumuiyaRepo.findAll();
  model.addAttribute("kandaMichango", kandaMichango);
  model.addAttribute("jumuiya", jumuiya);
  return "jumuiya_michango_form";
}

@PostMapping("/save-michango-jumuiya")
public String saveJumuiyaMichango(Jmichango jumuiyaMichango, BindingResult result){

  if(result.hasErrors()){
    System.out.println(result);
    return "jumuiya_michango_form";
  }
  jMichangoRepository.save(jumuiyaMichango);
  return "index";
} 

提交表单后,我在控制台中收到来自 System.out.println(结果)的以下错误;

Blockquoteorg.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'jmichango' on field 'kandaMchango': rejected value [41]; codes [typeMismatch.jmichango.kandaMchango,typeMismatch.kandaMchango,typeMismatch.com.church.church.entity.Kmichango,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [jmichango.kandaMchango,kandaMchango]; arguments []; default message [kandaMchango]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.church.church.entity.Kmichango' for property 'kandaMchango'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.persistence.ManyToOne @javax.persistence.JoinColumn com.church.church.entity.Kmichango] for value '41'; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Provided id of the wrong type for class com.church.church.entity.Kmichango. Expected: class java.lang.Integer, got class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class com.church.church.entity.Kmichango. Expected: class java.lang.Integer, got class java.lang.String]

错误很明显,它无法转换值类型,现在如何解决这个问题并仍然保持这两个实体的关系?

里面 jumuiya_michango_form.html 你有一个 select

请将其更改为 name="kandaMchango.id",因为您实际上想将 selected 选项的值映射到 kandaMchango 对象的 ID。