Java Spring MVC:无法将类型字符串的值转换为属性';类别';

Java Spring MVC:无法将类型字符串的值转换为属性';类别';,java,hibernate,jsp,spring-mvc,Java,Hibernate,Jsp,Spring Mvc,我有一个名为Project的类,它有一个属性类别。类项目和类别具有一对多关系 public class Project { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="category_id") private Category category; public class Category { @OneToMany(fetch=FetchType.LAZY, mappedBy="category") priva

我有一个名为Project的类,它有一个属性类别。类项目和类别具有一对多关系

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); 
我正在尝试添加一个项目,但一直出现此错误。谁能告诉我我做错了什么

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(源代码)是您在表单中提到的
    java.lang.String
  • T(target)是
    类别
    。转换器接口有一个必须实现的抽象方法

    T convert(S source);
    
    在实现中,您必须提供将源对象转换为
    类别的逻辑。您可能需要
    @Repository
    类的一些帮助

  • 之后,您必须在WebMVC配置类中注册此转换器,该类很可能扩展了WebMVC配置支持。您必须
    @重写
    addFormatters
    方法,并在那里注册转换器 所以会是这样的

    转换器类的实现

    @Component
    public Class StringToCategoryConverter implements Converter<String, Category> {
    
      @AutoWired
      private CategoryRepository repository;
    
      @Override
      public Category convert(final String source) {
        return repository.getCategoryById(source);
      }
    }
    

    希望能有帮助。

    这个想法很直截了当。你必须做两件事

  • 您必须创建一个实现
    org.springframework.core.convert.converter.converter
    的类,其中S(源代码)是您在表单中提到的
    java.lang.String
  • T(target)是
    类别
    。转换器接口有一个必须实现的抽象方法

    T convert(S source);
    
    在实现中,您必须提供将源对象转换为
    类别的逻辑。您可能需要
    @Repository
    类的一些帮助

  • 之后,您必须在WebMVC配置类中注册此转换器,该类很可能扩展了WebMVC配置支持。您必须
    @重写
    addFormatters
    方法,并在那里注册转换器 所以会是这样的

    转换器类的实现

    @Component
    public Class StringToCategoryConverter implements Converter<String, Category> {
    
      @AutoWired
      private CategoryRepository repository;
    
      @Override
      public Category convert(final String source) {
        return repository.getCategoryById(source);
      }
    }
    

    希望能有帮助。

    非常感谢。我一直在努力实现类似的目标已经有一段时间了,这是我见过的最好的综合。非常感谢。我一直在努力实现类似的目标已经有一段时间了,这是我见过的最好的综合。
    @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();
      }
    }