web-dev-qa-db-ja.com

ブールフィールドのJSON Postリクエストはデフォルトでfalseを送信します

こんにちは、FireFox RestClientを使用してJSON Postリクエストを送信しています。

私の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の値をチェックすると、送信するものに関係なくfalseです。 JSONリクエストで以下の値を試しました

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

上記のすべてがコントローラーで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;
}   
}
30
NewQueries

ジャクソンは、デフォルトで、ゲッターまたはセッター(最初に一致するもの)からプロパティ名を決定することに注意してください。

POJOUserDetails型のオブジェクトをデシリアライズするために、ジャクソンは3つのプロパティを探します

public void setFirstName(String firstName) {

public void setLastName(String lastName) {

public void setActive(boolean isActive) {

jSONで。これらは基本的にfirstNamelastNameactiveです。

次のJSONを取得します

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

したがって、firstNamelastNameはマップされますが、isActiveという名前のプロパティはありません。

Jacksonは、Javaアクセサ(ゲッター)およびミューテーター(セッター)を使用したBean命名規則に依存しています。

private boolean isActive;

適切なセッター/ゲッター名は

public boolean getIsActive() {
    return isActive;
}

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

したがって、2つの解決策があります。上記のようにゲッター/セッターを変更するか、フィールドに@JsonProperty注釈を付けて、ジャクソンがフィールド名を使用してプロパティ名を決定するようにします

@JsonProperty
private boolean isActive;
76

ロンボックなどのライブラリを使用してゲッターとセッターを生成する場合、フィールドタイプがブール値の場合、フィールド名に「is」を追加しないでください。 JacksonはJavaのデフォルトの名前付けBean規則を使用し、フィールドの設定中に 'is'を追加するため、 'is'を追加するとフィールドマッピングが間違っているためです。

0
Chinmay Biswal