2017-08-31 26 views
-1

在我的春节,启动应用程序,我用DTO的输入的请求体投地的一类长值的列表:如何在一个DTO

@RequestMapping(path = "/user", method = RequestMethod.POST) 
public void addUser(@RequestBody UserDto userDto, Principal principal) throws IOException { 
    //... 
} 

在这个DTO类的不同属性,有一个长值列表:

public class UserDto implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private List<Long> userIds; 

    public void setUserIds(List<Long> userIds) { 
     this.userIds = userIds; 
    } 
} 

我正在写一个端到端测试,其中测试addUser端点。但是在使用addUser方法的第一行代码之前它会抛出500个错误代码。我挖成的代码,并尝试不同的东西,我发现,这个工程:

public void setUserIds(Object userIds) { 
     System.out.println(userIds); // this outputs [12,3,122,44] 
    } 

我想知道我应该如何处理,设置值列表的DTO对象的方法。

编辑1

我试图System.out.println(userIds.getClass())并返回String

+3

这是'用户'的真实类型吗?它是一个包含'[1,2,3]'的字符串吗?如果是的话,你需要提取所有数字,你不能只是施放。 – BackSlash

+1

请向我们展示一个最小可行的例子。 '用户'来自哪里? – Chris311

+0

@ Chris311我在问题中提到:它是DTO类的一部分,它来自Spring休息控制器请求体。 –

回答

3

您可以在下面的技术,如果你使用的是Java 8否则,您需要手动施放它们使用:

如果users是一种您已经从user Object转换为String数组。

long[] longArray = Arrays.stream(users).mapToLong(Long::longValue).toArray(); 

注:照顾NumberFormatException

+0

'users'是一个对象,而不是一个数组。为什么要流入一个对象?整个问题是将一个对象转换为一个数组,但是您认为'users'是一个数组。 –

+1

@ArianHosseinzadeh但是这就是你在问题中用'[1,2,3]'表示的建议。如果它是'String',则不能**将其转换为数组。拆分它,然后解析它 - 但这不是**铸造**。 – qqilihq

+0

我编辑了这个问题,我认为现在应该更清楚了。 –

0

在java中的 “对象” 级是因为every class is subclass of "Object" class宇宙级的。对于错误检测,您应该在“setUser”方法中检查参数“用户”。检查传递给用户参数的类是什么。它很容易做,有一条线要检查:

System.out.println(users.getClass()); 

它会显示“users”参数的类。如果导致类是“字符串”,它具有数字格式(例如:“123.45”),你可以直接将其转换为数字,例如“双师型”:

Double.parseDouble("123.45"); 

但是,如果从检查结果类字符串格式,我经常说它是“反馈格式”,因为如果你做Array.toString()你会得到相同的格式,例如:“[12,3.4,5]”,提取数字更加棘手。您可以使用regular expression解析字符串,并将每个提取的数字转换为整数/浮点数类。我在这里提出的每一个建议都与你的上下文有所不同,但在相同的方面也是如此。

+0

我编辑了这个问题,我认为现在应该更清楚了。 –