2017-08-31 27 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

我編輯了這個問題,我認爲現在應該更清楚了。 –