2016-02-19 2 views
4

Я использую Spring 4.1.4 и реализую простой сервис REST. У меня есть метод POST, который в качестве запроса получает объект Person.Spring 4 MVC - Rest service - использовать значения по умолчанию в bean-компонентах

@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 Methode это можно установить значение по умолчанию с @RequestParam(value="activeState", required=false, defaultValue="2"), но есть возможность сделать подобную вещь на уровне класса?

+0

Когда должно быть применено значение по умолчанию: если параметр отсутствует в запросе вообще, если параметр имеет значение null/empty? – Ralph

+1

Просто просто объявите значение для целочисленного поля в классе: 'private Integer activeState = 2;' Или я неправильно понял вас? –

+0

@Ralph Хороший вопрос - в обоих случаях: нет и пустой или пустой –

ответ

10

Ваш класс Person на самом деле не является весенним бобом. Это просто класс, параметры которого задаются при вызове конечной точки приложения из-за аннотации @RequestBody. Параметры, которые не находятся в теле вашего звонка не будет просто получить переплетены так, чтобы решить вашу проблему, то вы можете сделать это: значения

  1. Установить по умолчанию для лица класса, как это (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. Если распечатать тыс е лицо объекта в контроллере, вы заметите, что ПгвЬЫате получил значение не по умолчанию, в то время как другие являются по умолчанию:

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

Консоль вывода: Person{firstName='notDefault', lastName='default', activeState=7}

0

Добавление @Edd ответа, , если вы хотите, чтобы переопределить значения по умолчанию от входа, то мы должны аннотировать боб с @JsonAutoDetect следующим образом:

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 + 
       '}'; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^