【问题标题】:Spring Conversion Service: how to convert String to List<MyType>?Spring Conversion Service:如何将 String 转换为 List<MyType>?
【发布时间】:2012-08-06 09:52:58
【问题描述】:

我正在使用 Spring 的转换服务,并注册了我自己的转换器:

public class MyTypeConverter implements Converter<String, MyType> {
    @Override
    public Currency convert(String text) {
        MyType object = new MyType();
        // do some more work here...
        return object;
    }
}

现在在我的应用程序中,我可以将 String 转换为 MyType 并且效果很好:

@Autowired
private ConversionService cs;

public void doIt() {
    MyType object = cs.convert("Value1", MyType.class);
}

但我也注意到,例如,我可以在我的 MVC 控制器中使用相同的转换器,并且它也可以在某种程度上与列表一起使用:

@RequestMapping(method = RequestMethod.GET, value = "...")
@ResponseBody
public final String doIt(@RequestParam("param1") List<MyType> objects) throws Exception {
    // ....
}

所以如果我在控制器中提交param1=value1,value2,我会收到一个List&lt;MyType&gt;,其中包含两个元素。所以spring确实用逗号分割字符串,然后将每个元素分别转换为MyType。是否也可以以编程方式执行此操作?

我需要类似这样的东西:

List<MyType> objects = cs.convert("Value1,Value2", List<MyType>.class);

【问题讨论】:

  • 当您致电cs.convert("Value1,Value2", List&lt;MyType&gt;.class); 时会发生什么?抛出了一些异常?
  • @jelies:Eclipse 告诉我“列表无法解析为变量”
  • 查看this的答案,可能会有帮助。
  • 请注意,由于 Java 使用类型擦除的通用实现,List&lt;MyType&gt;.class 完全等同于 List.class - 存储在列表中的元素类型在运行时丢失。因此 Spring不能使用它来改变它的转换行为。

标签: spring spring-mvc type-conversion spring-3


【解决方案1】:

我自己找到了非常接近的解决方案:

List<MyType> objects = Arrays.asList(cs.convert("Value1,Value2", MyType[].class));

如果转换服务会自动创建列表会更好,但使用Arrays.asList() 自己做并不是很大的开销。

【讨论】:

  • 这是唯一可行的解​​决方案。
猜你喜欢
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2013-08-26
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
相关资源
最近更新 更多