我正在使用 [WebMethod]
public static void SaveData(object data)
{
CreateDatatable(data);
var d = initialData;
var obj = JsonConvert.DeserializeObject(data);
}
并实施简单的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
}
我的问题是 - 是否有可能为bean中的属性设置默认值。像这样:
public class Person {
public Person(){ }
private String firstname;
private String lastname;
private Integer activeState;
//getter+setter
}
我知道在@Value(default=7)
private Integer activeState;
方法中使用@RequestParam
注释时,可以使用@RestController
设置默认值,但是有可能在类级别上执行类似的操作吗?
答案 0 :(得分:12)
你的Person类不是真正的春天豆。它只是一个类,当您通过@RequestBody
注释调用应用程序端点时,其参数已设置。不在你电话中的参数根本就不会被绑定,所以为了解决你的问题,你可以这样做:
像这样设置person类的默认值(为方便起见,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}
答案 1 :(得分:0)
添加到@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 +
'}';
}
}