簡體   English   中英

Spring 4 MVC - Rest服務 - 在bean中使用默認值

[英]Spring 4 MVC - Rest service - use default values in beans

我正在使用Spring 4.1.4並實現一個簡單的REST服務。 我有一個POST方法,它獲取一個Person對象作為請求。

@ResponseStatus(value = HttpStatus.CREATED)
@RequestMapping(value = "", method = RequestMethod.POST, headers = "Accept=application/json", consumes = "application/json")
public void add(@Valid @RequestBody Person oPerson) throws Exception {
    //do the things
}

豆角,扁豆:

public class Person {

    public Person(){ }

    private String firstname;

    private String lastname;

    private Integer activeState;

    //getter+setter
}

我的問題是 - 是否有可能為bean中的屬性設置默認值。 像這樣的東西:

@Value(default=7)
private Integer activeState;

我知道在@RestController方法中使用@RequestParam注釋時,可以使用@RequestParam設置默認值@RequestParam(value="activeState", required=false, defaultValue="2")但是有可能做類似的事情課堂上的東西?

你的Person類不是真正的春天豆。 它只是一個類,當您通過@RequestBody注釋調用應用程序端點時,其參數已設置。 不在你的通話體內的參數根本不會被綁定,所以為了解決你的問題,你可以這樣做:

  1. 像這樣設置person類的默認值toString()為方便起見, toString()被覆蓋:

     public class Person { public Person() { } private String firstName = "default"; private String lastName = "default"; private Integer activeState = 7; public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public Integer getActiveState() { return activeState; } @Override public String toString() { return "Person{" + "firstName='" + firstName + '\\'' + ", lastName='" + lastName + '\\'' + ", activeState=" + activeState + '}'; } } 
  2. 執行對端點的請求,例如使用此json數據:

     { "firstName": "notDefault" } 
  3. 如果在控制器中打印出person對象,您會注意到firstName獲得了非默認值,而其他值是默認值:

     public void add(@Valid @RequestBody Person oPerson) { System.out.println(oPerson); } 

控制台輸出: Person{firstName='notDefault', lastName='default', activeState=7}

添加到@Edd回答, 如果要覆蓋輸入中的默認值 ,那么我們必須使用@JsonAutoDetect注釋bean,如下所示:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class Person {

    public Person() {
    }

    private String firstName = "default";
    private String lastName = "default";
    private Integer activeState = 7;

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public Integer getActiveState() {
        return activeState;
    }

    @Override
    public String toString() {
        return "Person{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", activeState=" + activeState +
                '}';
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM