Игнорировать поля во время десериализации весной? - PullRequest
0 голосов
/ 22 января 2019

Я хочу игнорировать некоторые поля при десериализации данных JSON весной. Я не могу использовать @JsonIgnore, так как одна и та же модель будет использоваться в разных методах, и разные поля необходимо игнорировать. Я попытался объяснить ситуацию с помощью приведенного ниже примера.

class User
{
private String name;
private Integer id;
//getters and setters
}

Это класс User, который будет использоваться в качестве модели.

@RequestMapping(value = '/path1', method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<CustomResponse> loadUser1(@RequestBody User user){
    System.out.println(user.name);
    //user.id is not required here
}

Это первый метод, который будет использовать user.name и игнорировать user.id.

@RequestMapping(value = '/path2', method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<CustomResponse> loadUser2(@RequestBody User user){
    System.out.println(user.id);
    //user.name is not required here
}

Это второй метод, который использует user.id и игнорирует user.name.

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать @JsonFilter для достижения динамической фильтрации.

Сначала создайте фильтр с помощью com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter и передайте его поставщику фильтров com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider.

Затем объявите этоФильтруйте ваш бин, используя @JsonFilter.

В вашем случае это будет сделано:

@JsonFilter("myFilter")
public class User {
    private String name;
    private int id;
    // Getters and setters
}

Это будет применять фильтр к вашему POJO:

public MappingJacksonValue getFiltered() {
    SimpleFilterProvider filterProvider = new SimpleFilterProvider();
    filterProvider.addFilter("myFilter", SimpleBeanPropertyFilter.filterOutAllExcept("id"));
    User user = new User();
    user.setId(1);
    user.setName("Me");
    MappingJacksonValue jacksonValue = new MappingJacksonValue(user);
    jacksonValue.setFilters(filterProvider);
    return jacksonValue;
}

Редактировать: SimpleBeanPropertyFilter имеет фабричные методы для тендера почти ко всем практическим сценариям фильтрации.Используйте их соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...