我有一个名为 Project 的类,它有一个属性类别。 Project 类和 Category 类具有一对多关系。
public class Project {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="category_id")
private Category category;
public class Category {
@OneToMany(fetch=FetchType.LAZY, mappedBy="category")
private Set<Project> project = new HashSet<Project>(0);
在我的 JSP 中,我有一个下拉列表,可以在其中为特定项目选择类别
<select class="form-control" name="category" >
<c:forEach items="${categoriesList}" var="category">
<option value="${category.id}"><c:out value="${category.category_name}" /></option>
</c:forEach>
</select>
我的 Controller 看起来像这样
@RequestMapping(value = "/client/post_project", method = RequestMethod.POST)
public String postProject(@ModelAttribute("project") Project p){
projectService.addProject(p);
return "/client/project";
}
我正在尝试添加项目,但一直出现此错误。谁能告诉我我做错了什么?
Field error in object 'project' on field 'category': rejected value [3];
codes [typeMismatch.project.category,typeMismatch.category,typeMismatch.model.Category,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [project.category,category]; arguments []; default message [category]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'model.Category' for property 'category'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [model.Category] for property 'category': no matching editors or conversion strategy found]
最佳答案
这个想法非常简单。你必须做两件事。
- 您必须创建一个实现
org.springframework.core.convert.converter.Converter<S, T>
的类其中 S(来源)是java.lang.String
您在表单中提到的。
<option value="${category.id}">
T(目标)是Category
。转换器接口(interface)有一个必须实现的抽象方法。
T convert(S source);
在实现中,您必须提供将源对象转换为 Category
的逻辑。 。您可能需要 @Repository
的帮助。类。
- 之后,您必须在 WebMVC 配置类中注册此转换器,这很可能是
extends WebMvcConfigurationSupport
的类。 。您必须@Override
addFormatters
方法并在那里注册您的转换器。
所以它会是这样的
转换器类实现
@Component
public Class StringToCategoryConverter implements Converter<String, Category> {
@AutoWired
private CategoryRepository repository;
@Override
public Category convert(final String source) {
return repository.getCategoryById(source);
}
}
注册也是必需的,您可以在通常扩展 WebMvcConfigurationSupport
的类中进行注册。 。她的går vi。
@Component
@EnableSpringDataWebSupport
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(stringToCategoryConverter());
super.addFormatters(registry);
}
@Bean
public StringToCategoryConverter stringToCategoryConverter(){
return new StringToCategoryConverter();
}
}
就是这样,希望对你有帮助。
关于java - Spring MVC : Cannot convert value of type String to required type Category for property 'category' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017044/