JsonInclude.Include.NON_NULL работает не так, как ожидалось

#java #spring

#java #весна

Вопрос:

Я работаю над проектом Spring Boot. Я хочу удалить нулевые атрибуты из объекта запроса. Это потому, что мне нужно передать объект запроса стороннему API без нулевых атрибутов для следующего шага. Я искал в Интернете и обнаружил, что могу использовать JsonInclude.Include.NON_NULL . Но объект по-прежнему имеет нулевые значения. Ниже приведены мои примеры кодов,

Модель,

 @JsonInclude(JsonInclude.Include.NON_NULL)
public class RequestTest {
    private String firstname;
    private String lastname;
    private Integer age;

    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}
 

Контроллер,

 @PostMapping("/test/person")
public String testPerson(@RequestBody RequestTest req){
    log.info(gson.toJson(req)); //I need to pass this to 3rd party API without null fields.
    return "success";
}
 

И вот что я получил из журналов,

 {
  "firstname": "foo",
  "lastname": null,
  "age": 15
}
 

Объект по-прежнему содержит нулевое значение. Пожалуйста, помогите.

Отредактировано

Это пример кода, который мне нужен для передачи объекта стороннему API,

 public String passToThirdParty(RequestTest req){
    RestTemplate restTemplate = new RestTemplate();

    String url = "/xxx";

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);

    HttpEntity<RequestTest> entity = new HttpEntity<>( req, headers);

    log.info(gson.toJson(entity)); //Inside body, it still has "lastname": null.

    ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);

    return result.getBody();
}
 

Внутри тела журналов объекта у него все еще есть «lastname»: null
Пожалуйста, помогите. Или мне нужно удалять его вручную поле за полем?

Комментарии:

1. JsonInclude это аннотация Джексона, вы передаете значение в GSON-сериализатор

2. @codeflush.dev Тогда как я могу удалить его, потому что мне нужно передать его снаружи без null attrs. ps. Я добавил еще пример кода для подключения к сторонней стороне.

3. Используйте ObjectMapper вместо Gson или найдите соответствующую аннотацию / конфигурацию для gson