我有一个休息 Controller ,它有一个后映射,应该接受 csv/文本作为输入。以下是 csv 的格式:-
id, name, phoneNumber
n1,Joe/Dowwel,123-212-3233
n2,Sara/Ali,132,232,3111
我正在使用如下所示的开放 csv 注释将 csv 转换为 java pojo 作为后映射 Controller 方法的输入。:-
@CsvBindByPosition(position=2)
private String name;
此注释会将 csv 输入字段“name”映射到 java 对象(POJO)字段“name”(如下所示)
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(带有分隔符“/”)
我的要求是在 Employee POJO 中有 2 个单独的字段“firstName”和“lastName”,以便我可以将其拆分和分离,例如“firstName”= Joe 和“lastname”= Dowwel。
有什么方法可以使用更清洁的方法来实现它。也许使用更多注释来过滤?
如有任何帮助,我们将不胜感激。提前致谢。
最佳答案
显然您的输入数据没有映射到您的类结构。 Square peg, round hole.这里没有神奇的解决方案。
您必须:
- 修复数据源,要求数据发布者将
name
单个字段拆分为一对字段given_name
&surname
。 - 在您端解析数据,将单个值分成一对值。
第一个选项是理想的。与其事后窃取数据,不如首先正确传达数据。
如果这不可能,您必须找到解决方法。
我想到的第一个解决方法是,Employee
类上有一个构造函数,它接受传入的组合名称并将其拆分为其他两个字段。请参阅String::split
。
但是,在当前代码中使用该解决方法意味着除了名字和姓氏成员字段之外,还需要在 Employee
上定义一个冗余的 name
成员字段。因此,另一个解决方法是不使用 CSV 库的绑定(bind)功能。相反,编写一些代码来读取 CSV 的每个字段并将其传递给 Employee
的构造函数。当遇到 name
字段时,将其拆分,然后将两个部分传递给构造函数。
关于java - 如何使用自定义拆分器拆分由分隔符分隔的 csv 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56197766/