我有一个 Spring Batch 作业设置为读取 CSV。
在阅读器中,它使用 FlatFileReader 创建代表每一行的 ProductCSV 对象。
然后在编写器中,它将每一行转换为一个实际的 Object 对象,该对象使用 hibernate 映射到使用扩展 ItemWriter 的数据库中。
效果很好我唯一的问题是 ENUM 类型的字段。我得到的错误是:
字段“类别”上的对象“目标”中的字段错误:拒绝值 [某些类别];代码 [typeMismatch.target.category,typeMismatch.category,typeMismatch.com.project.enums.ProductCategory,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [target.category,category]; 论据 []; 默认消息[类别]];默认消息 [无法将类型“java.lang.String”的属性值转换为属性“类别”所需的类型“com.project.enums.ProductCategory”;嵌套异常是 java.lang.IllegalStateException:无法将类型 [java.lang.String] 的值转换为属性“类别”所需的类型 [com.project.ProductCategory]:找不到匹配的编辑器或转换策略]
这是 ENUM 的样子:
package com.project.enums;
public enum ProductCategory
{
SomeCategory( "Some Category" ),
AnotherCategory( "Another Category" );
final String display;
private ProductCategory( String display )
{
this.display = display;
}
@Override
public String toString()
{
return display;
}
}
下面是 ProductCSV 对象的样子:
package com.project.LoadSavingInfo;
import com.project.enums.ProductCategory;
public class ProductCSV
{
private ProductCategory category;
public ProductCategory getCategory()
{
return this.category;
}
public void setCategory( ProductCategory category )
{
this.category = category;
}
}
这是实际对象的样子:
package com.project;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Table;
import com.project.enums.ProductCategory;
@Entity
@Table( name = "product" )
public class Product
{
@Column( nullable = false )
@Enumerated(EnumType.STRING)
private ProductCategory category;
public ProductCategory getCategory()
{
return category;
}
public void setCategory( ProductCategory category )
{
this.category = category;
}
}
因此,当它从 CSV 中读取“某些类别”之类的内容时,如何将其转换为 ENUM 类型?非常感谢任何帮助或建议,如果您需要更多信息,请询问。