【问题标题】:Java convert list of string to list of objectsJava将字符串列表转换为对象列表
【发布时间】:2019-01-17 16:37:20
【问题描述】:

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

我的数组如下所示:

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

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

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) {}

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

【问题讨论】:

  • 可能是您尝试转换为List of persons,而不是person。同样从您的问题中,我了解到您只转换为单个字符串(RequestBody),其中包含多个Person 的数据。
  • 如果抛出异常,请分享相关的stacktrace。
  • 使用 JSON 作为你的字符串格式,你甚至不需要做任何特别的事情;只需将参数类型声明为List&lt;Person&gt;,其余的由 spring 完成。

标签: spring-boot collections java-8


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2018-05-01
    • 1970-01-01
    相关资源
    最近更新 更多