Как включить нулевые значения в ответы JSON в spring boot REST API

#json #spring #spring-boot #response #rest

Вопрос:

Я нахожусь в процессе разработки RESTful API. Я хочу получить сведения о пользователе, позвонив в API. Но мой ожидаемый ответ не включал нулевые значения.

Ожидаемый Ответ

 {
    "id": 1,
    "username": "admin",
    "fullName": "Geeth Gamage",
    "userRole": "ADMIN",
    "empNo": null
} 
 

Фактический Ответ

   {
        "id": 1,
        "username": "admin",
        "fullName": "Geeth Gamage",
        "userRole": "ADMIN"
    } 
 

Мой код API rest для весенней загрузки приведен ниже. почему бы не включить нулевые параметры для моего ответа?

 @GetMapping(value = "/{userCode}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> findUser(@PathVariable String userCode)
{
    return ResponseEntity.status(HttpStatus.OK).body(userService.getUserByUserName(userCode));
}


@Override
@Transactional
public Object getUserByUserName(String username)
{
    try {
        User user = Optional.ofNullable(userRepository.findByUsername(username))
                   .orElseThrow(() -> new ObjectNotFoundException("User Not Found"));
            
            return new ModelMapper().map(user, UserDTO.class);

    } catch (ObjectNotFoundException ex) {
        log.error("Exception  :  ", ex);
        throw ex;
    } catch (Exception ex) {
        log.error("Exception  :  ", ex);
        throw ex;
    }
}
 

User класс сущностей и UserDTO класс объектов, как показано ниже

User.class

 @Data
@Entity
@Table(name = "user")
public class User{
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "ID", unique = true, nullable = false)
    private Long id;
    @Column(name = "USERNAME", nullable = false, length = 64)
    private String username;
    @Column(name = "USER_ROLE", nullable = false)
    private String userRole;
    @Column(name = "EMP_NO")
    private String empNo;
}
 

UserDTO.class

 @Data
public class  UserDTO {
    private Long id;
    private String username;
    private String fullName;
    private String userRole;
    private String empNo;
}
 

Ответ №1:

Предполагая, что вы используете Jackson, вы можете настроить его глобальное поведение, используя setSerializationInclusion(JsonInclude.Include) на ObjectMapper .

Для вашего варианта использования вы можете настроить его как НЕПУСТОЙ или ВСЕГДА. Для получения более подробной информации, пожалуйста, проверьте https://fasterxml.github.io/jackson-annotations/javadoc/2.6/com/fasterxml/jackson/annotation/JsonInclude.Include.html.

Вы также можете сделать это на уровне класса или атрибута, используя соответствующую аннотацию @JsonInclude .