【问题标题】:Failed to convert property value of type 'java.lang.String' to required type '[]'无法将类型“java.lang.String”的属性值转换为所需类型“[]”
【发布时间】:2021-06-13 12:46:03
【问题描述】:

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

下面是主键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>

以下是我的控制器中用于链接到表单和发布数据的两种方法

@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(result);

收到以下错误

Blockquoteorg.springframework.validation.BeanPropertyBindingResult: 1 个错误 字段“kandaMchango”上的对象“jmichango”中的字段错误:拒绝值 [41];代码 [typeMismatch.jmichango.kandaMchango,typeMismatch.kandaMchango,typeMismatch.com.church.church.entity.Kmichango,typeMismatch];参数 [org.springframework.context.support.DefaultMessageSourceResolvable:代码 [jmichango.kandaMchango,kandaMchango];论据 [];默认消息 [kandaMchango]];默认消息 [无法将类型“java.lang.String”的属性值转换为属性“kandaMchango”所需的类型“com.church.church.entity.Kmichango”;嵌套异常是 org.springframework.core.convert.ConversionFailedException: 无法从类型 [java.lang.String] 转换为类型 [@javax.persistence.ManyToOne @javax.persistence.JoinColumn com.church.church.entity.Kmichango]值“41”;嵌套异常是 org.springframework.dao.InvalidDataAccessApiUsageException:为类提供了错误类型的 id com.church.church.entity.Kmichango。预期:类 java.lang.Integer,得到类 java.lang.String;嵌套异常是 java.lang.IllegalArgumentException:为类 com.church.church.entity.Kmichango 提供了错误类型的 id。预期:类 java.lang.Integer,得到类 java.lang.String]

错误很明显是值类型转换失败,现在我该如何解决这个问题并且仍然保持这两个实体的关系?

【问题讨论】:

  • 似乎您的 fomr 提供了一个字符串,广告您正在尝试设置一个 int。
  • 如何在不影响@jr593 关系的情况下更改此设置

标签: java spring spring-boot spring-mvc thymeleaf


【解决方案1】:

在 jumuiya_michango_form.html 你有一个选择

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

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2018-08-21
    • 2017-04-21
    • 2021-01-23
    • 2018-10-13
    • 2017-06-14
    • 2016-07-15
    • 2019-06-20
    • 2014-07-05
    相关资源
    最近更新 更多