我想返回自定义消息以及我的端点应该以json格式返回的数据。例如:
{
"id": "1",
"name": "John",
"surname": "Jackson",
"city": "Los Angeles"
"message": "There was only 1 person in chosen category"
}
所以我的POJO类的人具有以下字段:ID,名称,姓氏,城市。但是,我也想返回消息,以便客户端应用程序可以在前端显示消息。我一直在寻找解决方案。默认情况下,控制器端点可以将对象返回为json没问题。但这只是给我数据,200个状态而已。我发现了有关返回ResponseEntity的信息,但这并不能解决问题,因为在响应正文中它需要一个POJO,因此我仍然无法与数据一起发送自定义消息。我需要发送自定义消息,数据和正确的状态代码。
您可以创建一个将从控制器返回的通用类,该类将通过message
属性来丰富您的模型:
public class ServerResponse {
@JsonUnwrapped
private final Object wrapped;
private final String message;
public ServerResponse(Object wrapped, String message) {
this.wrapped = wrapped;
this.message = message;
}
//getters
}
然后,您可以将任何对象传递给构造函数中的此类,并让Jackson为您处理序列化。这样,您不必为每个模型创建一个新类:
User user = new User("1", "John", "Jackson", "Los Angeles");
ServerResponse serverResponse = new ServerResponse(user, "There was only 1 person in chosen category");
并且当您从控制器返回ServerResponse
时,它将被序列化为:
{
"id":"1",
"name":"John",
"surname":"Jackson",
"city":"Los Angeles",
"message":"message"
}
尝试创建具有ID,名称,姓氏,城市,消息字段(获取程序和设置程序)的新帮助程序类(CustomUser)。并在控制器上向您发送用户(具有属性的新用户)后,创建CustomUser类的新实例,设置属性,然后发送customUser,像这样:
CustomUser customUser = new CustomUser();
customUser.setId(user.getId);
customUser.setName(user.getName);
customUser.setSurname(user.getSurname);
customUser.setCity(user.getCity);
customUser.setMessage("Custom message");
您可以使用@MappedSuperclass和@Transient来解决您的要求。
因此您将拥有这样的基类:
@MappedSuperclass
@Data
public class BaseEntity {
@Transient
private String message;
}
您的客户类别将如下所示:
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = "customer")
public class Customer extends BaseEntity {
@Id
private Integer id;
private String name;
private String surname;
private String city;
}
这样,您可以将此字段添加到所有实体。