Java将字符串列表转换为对象列表

时间:2018-08-10 06:16:17

标签: spring-boot collections java-8

为了提高性能,我的API将接收需要转换为对象数组的字符串数组。

我的数组如下:

List<String> listPersons = ["1, Franck, 1980-01-01T00:00:00, 00.00", "2, Martin, 1989-01-01T00:00:00, 00.00"];

如果可能的话,如何使用Java 8轻松地将其转换为“人(列表)”列表,这样我就不必创建循环并手动分解字符串了?

class Person {
 private Integer id;
 private String name;
 private Date dateOfBirth;

 // getter and setter
}

理想情况下,我想直接使用SpringBoot自动执行此操作-使用自定义转换器,例如:

public class StringToPersonConverter implements Converter<String, Person> {

    @Override
    public Person convert(String from) {
        String[] data = from.split(",");
        return new Person(Integer.parseInt(data[0]), data[1], new Date(data[2]));
    }
}

声明转换器:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToCreditCardConverter());
    }
}

理想情况下直接从我的控制器映射它?

@RequestMapping(value = "/insertPersons", method = RequestMethod.POST)
@ResponseBody
public String savePersons(@RequestBody List<Person> listPersons) {}

不幸的是,它似乎没有检测到我的转换器,并且抛出了错误; / 任何想法?谢谢

1 个答案:

答案 0 :(得分:0)

请注意:String[] data = from.split(",");不能与,用作字符分隔符,因为值使用此字符,例如:1980-01-01T00:00:00, 00.00

  

为了提高性能,我的API将接收一个数组   我需要转换为对象数组的字符串。

这是没有答案。 JSON是一种消耗很少的内存(字面量)来传达结构的格式。因此,您甚至不需要将一个字符串连接到一个字符串中,在这里代表差异Person的不同信息。
设计一个等待非结构化JSON /文本的API,并以反模式对后端的JSON /文本进行重构:效率不高,它使API不清楚,并且在前端和后端都添加了样板代码。