2017-07-20 25 views
1

我使用2.X新澤西澤西設置POJO的值設置爲0

我已經在與getter和setter方法POJO類。

public class AccountObject { 

private int accountNumber; 
private int accountStatus; 

//Getters and Setters 

} 

這是在控制我的方法簽名

@POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces("application/json") 
    public Response createAccount(AccountObject accountObject, @Context ContainerRequestContext requestContext) { 

// 

} 

我打電話我用空JSON身體

{} 

問題API是:我得到了accountNumber和accoutStatus值0

我寫了一些val idation函數檢查accountNumber和accountStatus,所以由於這種行爲,我的函數被繞過。

我無法理解的值如何分配給值0

+0

你希望它是什麼東西? – itsmichaelwang

+0

我期待它爲空。因爲我沒有提供它在json –

+0

你不能有一個基元爲空。你可以嘗試使用Integer而不是int嗎? – itsmichaelwang

回答

1

如果你希望它是null,請嘗試使用Integer代替intint不能是null,因爲它是原始類型,但Integer可以。'

文檔:https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

+0

先生我現在可以執行'null'檢查,例如:如果我在我的POJO中引入'email',並且沒有在我的請求中傳遞'email',那麼我通過String.valueOf(AccountDetails.getEmail).equalsIgnoreCase ( 「空」)'。但是,如果我將accountNumber設置爲Integer並嘗試檢查它是否爲null,則會拋出空指針異常。 基本上我想驗證在請求中密鑰是否存在或不存在。我怎樣才能達到這個 –

+0

你可以做'AccountDetails.getEmail()== null'? – itsmichaelwang

+0

是的,我可以,我只是檢查它。 –

2

這有什麼做與澤西但Java核心&傑克遜規則。

澤西使用傑克遜處理基於POJO JSON綁定支持提到here

所以你要明白,當它接收並清空JSON像下面傑克遜是如何工作的,

import java.io.IOException; 

import com.fasterxml.jackson.core.JsonParseException; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 


public class App 
{ 
    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException 
    { 

     String JSON = "{}"; 

     ObjectMapper mapper = new ObjectMapper(); 

     AccountObject acObject = mapper.readValue(JSON, AccountObject.class); 

     System.out.println(acObject.getAccountNumber()+" :"+acObject.getAccountStatus()); 


    } 
} 

你會看到傑克遜創建AccountObject默認int基元值爲零(根據核心Java規則),因爲它沒有在輸入JSON中找到任何值。

如果您將字段類型更改爲Integer,那麼根據核心Java默認字段規則,這些值將變爲null

int不是參考類型,因此它不能被分配到null

因此,您需要根據您的驗證要求更改您的POJO,或根據您的POJO更改驗證邏輯。

只是爲了完整起見,依賴關係如下,

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.8.9</version> 
    </dependency> 

    <dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.8.9</version> 
    </dependency>