java - Spring MVC : Cannot convert value of type String to required type Category for property 'category'

标签 java hibernate jsp spring-mvc

我有一个名为 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]

最佳答案

这个想法非常简单。你必须做两件事。

  1. 您必须创建一个实现 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/

    相关文章:

    java - 文件编写器覆盖文件而不是附加到末尾的问题

    java - Hibernate:选择集合包含所有指定值的实体

    java - 带有枚举字段的 Hibernate Search/Lucene 范围查询不返回任何结果

    java - 无法向数据库jsp插入或更新记录

    java - HttpServletRequest无法执行getParameter操作

    java - 如何在 JSP 中将与给定链接关联的文本显示为超链接?

    java - 图表引擎,图表内嵌另一个图表

    java - 重新附加父实体时删除子实体

    java - Hibernate获取SQL query.list() : ArrayIndexOutOfBoundsException 0

    java - ClassPathXmlApplicationContext : Error creating bean with name 'X' ; nested exception is java. lang.NoSuchMethodError : javax. persistence.Table.indexes()