我有一个rest控制器,它具有一个后置映射,应该接受csv / text作为输入。以下是csv的格式:-
id, name, phoneNumber
n1,Joe/Dowwel,123-212-3233
n2,Sara/Ali,132,232,3111
我正在使用开放式csv注释,如下所示,将csv转换为java pojo作为后映射控制器方法的输入。:-
@CsvBindByPosition(position=2)
private String name;
此批注会将CSV输入字段“名称”映射到Java对象(POJO)字段“名称”(如下所示)
public class Employee {
@CsvBindByPosition(position=1)
private String id;
@CsvBindByPosition(position=2)
private String name;
@CsvBindByPosition(position=3)
private String phoneNumber;
public Employee () {
}
但是,在spring转换器将其转换后的java pojo中,'name'的值将为ex:Joe / Dowwel(带分号'/')
我的要求是在员工POJO中具有2个单独的字段“ firstName”和“ lastName”,这样我就可以像“ firstName” = Joe和“ lastname” = Dowwel一样对其进行拆分和分隔。
有什么方法可以使用更清洁的方法来实现?也许使用更多注释进行过滤?
任何帮助将不胜感激。预先感谢。
答案 0 :(得分:0)
很显然,您的输入数据未映射到您的类结构。 Square peg, round hole.这里没有神奇的解决方案。
您必须:
name
的单个字段分成一对字段given_name
和surname
。 第一个选项是理想的。首先要使数据正确通信,而不是在事后修改数据。
如果这不可能,那么您必须找到一种解决方法。
我想到的第一个解决方法是,您在Employee
类上有一个构造函数,该构造函数采用传入的组合名称并将其拆分为其他两个字段。参见String::split
。
但是,在当前代码中使用该解决方法意味着除了名字和姓氏成员字段之外,在name
上定义一个冗余的Employee
成员字段。因此,另一个解决方法是不使用CSV库的绑定功能。而是编写一些代码来读取CSV的每个字段,并将其传递给Employee
的构造函数。遇到name
字段时,将其拆分,然后将这两部分都传递给构造函数。