#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
.