#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