Spring 4 MVC - Rest服务 - 在bean中使用默认值

时间:2016-02-19 07:20:22

标签: java spring rest spring-mvc spring-4

我正在使用 [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设置默认值,但是有可能在类级别上执行类似的操作吗?

2 个答案:

答案 0 :(得分:12)

你的Person类不是真正的春天豆。它只是一个类,当您通过@RequestBody注释调用应用程序端点时,其参数已设置。不在你电话中的参数根本就不会被绑定,所以为了解决你的问题,你可以这样做:

  1. 像这样设置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 +
                    '}';
        }
    }
    
  2. 对您的终端执行请求,例如使用此json数据:

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

    public void add(@Valid @RequestBody Person oPerson) {
        System.out.println(oPerson);
    }
    
  4. 控制台输出: 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 +
                '}';
    }
}