2014-02-20 108 views
15

您好我正在使用FireFox RestClient發送JSON Post請求。JSON布爾字段的發佈請求默認發送false

我的JSON請求如下:

{ "firstName": "Test", "lastName": "1", "isActive": 1 } 

我的POJO具有isActive域如下

private boolean isActive; 

我的控制器是如下

@RequestMapping(method = {RequestMethod.POST, 
           RequestMethod.PUT}, value = "/save") 
public ResponseEntity<RestResponse> save(
     @RequestBody POJOUserDetails userDetails, WebRequest request){ 

定義在我的POJO,當我檢查isActive的價值,無論我發送什麼都是錯誤的。 我在JSON請求

"isActive": 1 
"isActive": true 
"isActive": "true" 
"isActive": "" 
"isActive": null 
"isActive": false 

上述所有在我的控制器發送虛假嘗試下面的值。請幫忙。由於

添加POJO細節

@JsonIgnoreProperties(ignoreUnknown = true) 
@JsonSerialize(include=Inclusion.NON_EMPTY) 
public class POJOUserDetails { 
private String firstName; 
private String lastName; 
private boolean isActive; 

public boolean isActive() { 
    return isActive; 
} 
public void setActive(boolean isActive) { 
    this.isActive = isActive;  
} 

    public String getFirstName() { 
    return firstName; 
} 
public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 
public String getLastName() { 
    return lastName; 
} 
public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 
} 
+0

我們能看到你滿級,getter/setter方法以及註釋你的領域? –

+0

需要有關模型和DAO的更多信息 – Filipe

+0

您的firstName和lastName變量設置是否正確? – gravityplanx

回答

37

記得傑克遜,在默認情況下,無論從getter或setter(第一匹配)決定了屬性名稱。

反序列化POJOUserDetails類型的對象,傑克遜將查找三個屬性

public void setFirstName(String firstName) { 

public void setLastName(String lastName) { 

public void setActive(boolean isActive) { 
在JSON

。這些基本上是firstNamelastName,active

會得到以下JSON

{ "firstName": "Test", "lastName": "1", "isActive": 1 } 

所以firstNamelastName映射,但你沒有屬性命名isActive

傑克遜依賴於Java Bean的命名約定及其訪問器(getter)和增變器(setters)。對於像

private boolean isActive; 

場相應的setter /吸氣名

public boolean getIsActive() { 
    return isActive; 
} 

public void setIsActive(boolean isActive) { 
    this.isActive = isActive; 
} 

所以,你有兩種可能的解決方案。更改您的getter/setter如上圖所示,或@JsonProperty讓傑克遜使用的字段名確定屬性名

@JsonProperty 
private boolean isActive; 
+0

這兩個解決方案都有效。 (@JsonProperty和更改get和set方法名稱)。它現在正確地認識到真假。但是對於null和「」(空白),它會發送默認值false。這可以改變嗎? – NewQueries

+0

@NewQueries您希望默認情況下它是「真」嗎?只需在聲明中初始化你的類中的字段'private boolean isActive = true;' –

+1

我在構造器中這樣做。 public POJOUserDetails(){this.isActive = true; }我不希望它是必然的。只是想知道是否可以讀取傳遞的確切值,無論是空白還是空值或布爾值。 – NewQueries