[英]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
注釋調用應用程序端點時,其參數已設置。 不在你的通話體內的參數根本不會被綁定,所以為了解決你的問題,你可以這樣做:
像這樣設置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 + '}'; } }
執行對端點的請求,例如使用此json數據:
{ "firstName": "notDefault" }
如果在控制器中打印出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.