为JSON格式的数据返回客户端消息-Java / Spring / REST

问题描述 投票:0回答:3

我想返回自定义消息以及我的端点应该以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,因此我仍然无法与数据一起发送自定义消息。我需要发送自定义消息,数据和正确的状态代码。

java json spring rest httpresponse
3个回答
1
投票

您可以创建一个将从控制器返回的通用类,该类将通过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"
}

1
投票

尝试创建具有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");

1
投票

您可以使用@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;
}

这样,您可以将此字段添加到所有实体。

© www.soinside.com 2019 - 2024. All rights reserved.