在我的Spring启动应用程序中,我使用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
答案 0 :(得分:3)
如果您使用的是Java 8,则可以使用以下技术,否则需要手动转换它们:
如果users
是您从String
转换而来的user Object
数组。
long[] longArray = Arrays.stream(users).mapToLong(Long::longValue).toArray();
注意:照顾NumberFormatException
答案 1 :(得分:0)
在java&#34; Object&#34; class是宇宙类,因为every class is subclass of "Object" class。对于错误检测,您应该检查参数&#34; users&#34;在你的&#34; setUser&#34;方法。检查传递给用户参数的类。它很简单,有一条线要检查:
System.out.println(users.getClass());
它会显示&#34;用户&#34;的类别。参数。如果结果类是&#34;字符串&#34;并且它有数字格式(例如:&#34; 123.45&#34;),您可以直接将其转换为数字格式,例如转换为&#34; Double&#34; :
Double.parseDouble("123.45");
但是,如果检查产生的类是带格式的字符串,我经常说它&#34;反馈格式&#34;因为如果你使用Array.toString(),你会得到相同的格式,例如:&#34; [12,3.4,5]&#34;,提取数字会更加棘手。您可以使用regular expression解析String并将每个提取的数字转换为Integer / Floating数字类。我在这里提出的每一个建议都与你的背景不同,但也是类似的。