Spring 4 MVC-REST服务-在Bean中使用默认值
问题内容:
我正在使用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;
我知道在方法中使用@RequestParam
注释时@RestController
可以设置默认值,@RequestParam(value="activeState", required=false, defaultValue="2")
但是有可能在类级别做类似的事情吗?
问题答案:
您的Person类并不是真正的弹跳豆。它只是一个类,由于@RequestBody
注释而在您调用应用程序端点时会设置参数。不在调用主体中的参数将不会被绑定,因此要解决您的问题,您可以执行以下操作:
-
像这样为您的人员类别设置默认值(
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"
}
-
如果在控制器中打印出人员对象,则会注意到firstName获得了非默认值,而其他则为默认值:
public void add(@Valid @RequestBody Person oPerson) { System.out.println(oPerson);
}
控制台输出: Person{firstName='notDefault', lastName='default', activeState=7}