更新不带空值的响应



我在下面提供了以下实体,

@Entity(name = "Employee")
@Table(name = "employee")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employee {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "creation_on" ,updatable = false)
private Date creationOn;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@Column(name = "phoneNumber")
private String phoneNumber;
@Column(name = "age")
private Integer age;
@Column(name = "state")
@Enumerated(EnumType.STRING)
private EmployeeStates employeeState;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id", referencedColumnName = "id")
private Address address;

}

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity(name = "address")
@Table(name = "address")
public class Address {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;

@Column(name = "street")
private String street;
@Column(name = "state")
private String state;
@Column(name = "country")
private String country;
@Column(name = "zip")
private int zip;
@OneToOne(mappedBy = "address")
private Employee employee;
}

POST调用如下所示,

@PostMapping(value = "/create")
public ResponseEntity<Object> createEmployee(@Valid @RequestBody EmployeeDto employeeDto) {
try{
Employee employee = employeeService.createEmployee(employeeDto);
if(employee != null){
return new ResponseEntity<>(employee, new HttpHeaders(), HttpStatus.CREATED);
}
return new ResponseEntity<>(ApiResponseMessage.getGenericApiResponse(Boolean.FALSE, HttpStatus.UNPROCESSABLE_ENTITY,
MessageConstant.EMPLOYEE_NOT_CREATE_MSG), new HttpHeaders(), HttpStatus.UNPROCESSABLE_ENTITY);
}
catch (Exception ex) {
log.error(MessageConstant.INTERNAL_SERVER_ERROR_MSG + ex.getMessage());
return new ResponseEntity<>(ApiResponseMessage.getInternalServerError(), new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}

响应来了,在下面:

{
"id": 2,
"creationOn": "2021-02-27T15:05:23.585+00:00",
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"age": 0,
"employeeState": "ADDED",
"address": {
"id": 3,
"street": "string",
"state": "string",
"country": "string",
"zip": 0,
"employee": null
}
}

如何在响应中看不到"employee": null ?

您需要在Entity类上使用@JsonInclude(Include.NON_EMPTY)@JsonInclude(Include.NON_NULL)

@Entity(name = "Employee")
@Table(name = "employee")
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(Include.NON_EMPTY)
public class Employee {
}

@JsonInclude(Include.NON_EMPTY)-值,该值指示不包括仅具有空值的属性或被认为为空的属性。空的定义是特定于数据类型的;具体操作请参见下文

@JsonInclude(Include.NON_NULL)-该值表示只包含非空值的属性。

我需要忽略来自子实体的JSON值,如下所示:

@OneToOne(mappedBy = "address")
@JsonIgnore
private Employee employee;

这一切都很好。

最新更新