问题描述
我从控制器的“保存”方法中收到 TypeMismatch 错误。 它是一个标准的实体、控制器、存储库 + thymeleaf 模板。 错误是:
2021-03-08 19:32:25.396 DEBUG 4501 --- [nio-8081-exec-3] o.s.web.method.HandlerMethod : Could not resolve parameter [0] in public java.lang.String com.revistas.controllers.IssueController.saveIssue(com.revistas.entities.Issue): org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'issue' on field 'magazine': rejected value [18]; codes [typeMismatch.issue.magazine,typeMismatch.magazine,typeMismatch.com.revistas.entities.Magazine,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [issue.magazine,magazine]; arguments []; default message [magazine]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.revistas.entities.Magazine' for property 'magazine'; 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.revistas.entities.Magazine] for value '18'; nested exception is java.lang.IllegalStateException: Repository doesn't have a find-one-method declared!]
我知道错误消息试图告诉我,当要保存的 id 很长时,被拒绝的值 [18] 是一个字符串,但我不明白该错误的原因,因为它运行良好在另一个实体、控制器、存储库中。 下面是代码: 一个实体
@Id
@Column(name = "id_magazine")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long idMagazine;
@Column(name = "magazineName",unique = true,nullable = false)
private String magazineName;
@Pattern(regexp = "[\\S]{4}\\-[\\S]{4}")
@Column(name = "isbn",nullable = false,length = 9)
private String magazineIssn;
@ManyToOne(targetEntity = Editor.class)
@JoinColumn(name = "id_editor")
private Editor editor;
@OnetoMany(targetEntity = Issue.class,mappedBy = "magazine",cascade = CascadeType.MERGE)
private List<Issue> issues = new ArrayList<Issue>();
@ManyToMany(mappedBy = "categoryMagazines")
private List<Category> categories = new ArrayList<Category>();
许多实体
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_issue")
private Long idissue;
@Column(name = "issue_number",nullable = false)
private String number;
@Column(name = "issue_title",nullable = true)
private String title;
@Column(name = "issue_pages",nullable = true)
private Integer pages;
@Column(name = "issue_date",nullable = true)
private Date issueDate;
@Column(name = "issue_cover")
private String cover;
@Pattern(regexp = "[\\S]{4}\\-[\\S]{4}\\-[\\s]{5}")
@Column(name = "issue_issn")
private String issueIssn;
@ManyToOne(targetEntity = Magazine.class,cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "id_magazine")
private Magazine magazine;
@OnetoMany(targetEntity = Article.class,fetch = FetchType.EAGER,mappedBy = "issue")
private List<Article> articles = new ArrayList<Article>();
许多控制器:
//Get all issues
@GetMapping("/all")
public String getAllIssues(Model model){
model.addAttribute("issues",repository.findAll());
return "/issues";
}
//Create a new issue
@GetMapping("/new")
public String newIssueForm(Model model){
List<Magazine> listMagazines = magazineRepository.findAll();
model.addAttribute("issue",new Issue());
model.addAttribute("magazines",listMagazines);
return "addissue";
}
//Save the issue
@PostMapping("/saveissue")
public String saveIssue(Issue issue){
repository.save(issue);
return "redirect:/issue/" + issue.getIdissue();
}
//Get one issue by id
和百里香模板的相关部分
<form action="#" method="post" th:object="${issue}" th:action="@{/issues/saveissue}">
<div class="form-group row">
<div class="mb-3">
<label th:utext="#{label.pages.newissue.magazine}"></label>
<div class="input-group">
<select th:field="*{magazine}" class="form-control" required>
<option th:each="magazine : ${magazines}" th:text="${magazine.magazineName}" th:value="${magazine.idMagazine}"/>
</select>
</div>
</div>
</div>
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)