如何在DTO

时间:2017-08-31 08:30:19

标签: java spring

在我的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

2 个答案:

答案 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数字类。我在这里提出的每一个建议都与你的背景不同,但也是类似的。