Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为所有响应定义公共基础Java模型的最佳方法是什么?_Java_Json_Pojo - Fatal编程技术网

为所有响应定义公共基础Java模型的最佳方法是什么?

为所有响应定义公共基础Java模型的最佳方法是什么?,java,json,pojo,Java,Json,Pojo,我需要将所有REST响应格式化为: { "response": {} "status": "ERROR" "error": { "status": "ERROR", "errors": [ { "type": "ERR

我需要将所有REST响应格式化为:

{
    "response": {}
    "status": "ERROR"
    "error": {
        "status": "ERROR",
        "errors": [
            {
                "type": "ERROR",
                "code": "E1001",
                "message": "This is error 1.",
                "reference": "TEST 1"
            },
            {
                "type": "ERROR",
                "code": "E1002",
                "message": "This is error 2.",
                "reference": "TEST 2"
            }
        ]
    }
}
其中,
响应
是任意数据(对象、数组;具有任意字段)对于每个REST API端点不同

为每个响应模型定义不同响应的最佳方法是什么?

我试过这个(它是有效的,但我不确定这样做是否正确):

BaseResponseModel.java

public class BaseResponseModel {
    
    private String status = "SUCCESS";
    private List<ErrorExtendedModel> errors = new ArrayList<>();
    
    // Various constructors, getters and setters
    
}
public class CustomerResponseModel extends BaseResponseModel {

    public List<Response> response = new ArrayList<>();

    public static class Response { 
    
        private String customerId;
        private String firstName;
        private String lastName;
    
        public Response(String customerId, String firstName, String lastName) {
        
            this.customerId = customerId;
            this.firstName = firstName;
            this.lastName = lastName;
        }
    
        // getters and setters of inner class
    }

    public CustomerResponseModel() {
        super();
    }

    public List<Response> getResponse() {
        return response;
    }

    public void setResponse(List<Response> response) {
        this.response = response;
    }
}
公共类BaseResponseModel{
私有字符串status=“SUCCESS”;
私有列表错误=新建ArrayList();
//各种构造函数、getter和setter
}
和子类:

CustomerResponseModel.java

public class BaseResponseModel {
    
    private String status = "SUCCESS";
    private List<ErrorExtendedModel> errors = new ArrayList<>();
    
    // Various constructors, getters and setters
    
}
public class CustomerResponseModel extends BaseResponseModel {

    public List<Response> response = new ArrayList<>();

    public static class Response { 
    
        private String customerId;
        private String firstName;
        private String lastName;
    
        public Response(String customerId, String firstName, String lastName) {
        
            this.customerId = customerId;
            this.firstName = firstName;
            this.lastName = lastName;
        }
    
        // getters and setters of inner class
    }

    public CustomerResponseModel() {
        super();
    }

    public List<Response> getResponse() {
        return response;
    }

    public void setResponse(List<Response> response) {
        this.response = response;
    }
}
公共类CustomerResponseModel扩展了BaseResponseModel{
public List response=new ArrayList();
公共静态类响应{
私有字符串customerId;
私有字符串名;
私有字符串lastName;
公共响应(字符串customerId、字符串firstName、字符串lastName){
this.customerId=customerId;
this.firstName=firstName;
this.lastName=lastName;
}
//内部类的getter和setter
}
公共CustomerResponseModel(){
超级();
}
公共列表getResponse(){
返回响应;
}
公共无效设置响应(列表响应){
这个。反应=反应;
}
}

我使用了内部静态类,每个子类中都有字段,但我不确定这样做是否正确。

在这种情况下,我不会选择继承,而是选择组合和利用泛型。这种方法的优点是不需要嵌套类,可以在整个应用程序中强制执行基本REST模型,同时保持响应类型为泛型

BaseResponseModel.java:

public class BaseResponseModel<T> {
    
    private T response;
    private String status = "SUCCESS";
    private List<ErrorExtendedModel> errors = new ArrayList<>();
    

    public BaseResponseModel(T response) {
        this.response = response;
    }

    // ...
    
}
public class CustomerResponseModel {
            
    private String customerId;
    private String firstName;
    private String lastName;
    
    public CustomerResponseModel(String customerId, String firstName, String lastName) {      
        this.customerId = customerId;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // ...
}
public class RestApiController {
            
    public BaseResponseModel<CustomerResponseModel> getOneCustomer(String customerId) {      
        return new BaseResponseModel(new CustomerResponseModel(...));
    }

    public BaseResponseModel<List<CustomerResponseModel>> getAllCustomers() {      
        return new BaseResponseModel(List.of(new CustomerResponseModel(...), new CustomerResponseModel(...)));
    }

    // ...
}
用法示例:

public class BaseResponseModel<T> {
    
    private T response;
    private String status = "SUCCESS";
    private List<ErrorExtendedModel> errors = new ArrayList<>();
    

    public BaseResponseModel(T response) {
        this.response = response;
    }

    // ...
    
}
public class CustomerResponseModel {
            
    private String customerId;
    private String firstName;
    private String lastName;
    
    public CustomerResponseModel(String customerId, String firstName, String lastName) {      
        this.customerId = customerId;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // ...
}
public class RestApiController {
            
    public BaseResponseModel<CustomerResponseModel> getOneCustomer(String customerId) {      
        return new BaseResponseModel(new CustomerResponseModel(...));
    }

    public BaseResponseModel<List<CustomerResponseModel>> getAllCustomers() {      
        return new BaseResponseModel(List.of(new CustomerResponseModel(...), new CustomerResponseModel(...)));
    }

    // ...
}
公共类重启控制器{
public BaseResponseModel getOneCustomer(字符串customerId){
返回新的BaseResponseModel(新的CustomerResponseModel(…);
}
public BaseResponseModel getAllCustomers(){
返回新的BaseResponseModel(List.of(new CustomerResponseModel(…),new CustomerResponseModel(…));
}
// ...
}

在这种情况下,我不会选择继承,而是选择组合和利用泛型。这种方法的优点是不需要嵌套类,可以在整个应用程序中强制执行基本REST模型,同时保持响应类型为泛型

BaseResponseModel.java:

public class BaseResponseModel<T> {
    
    private T response;
    private String status = "SUCCESS";
    private List<ErrorExtendedModel> errors = new ArrayList<>();
    

    public BaseResponseModel(T response) {
        this.response = response;
    }

    // ...
    
}
public class CustomerResponseModel {
            
    private String customerId;
    private String firstName;
    private String lastName;
    
    public CustomerResponseModel(String customerId, String firstName, String lastName) {      
        this.customerId = customerId;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // ...
}
public class RestApiController {
            
    public BaseResponseModel<CustomerResponseModel> getOneCustomer(String customerId) {      
        return new BaseResponseModel(new CustomerResponseModel(...));
    }

    public BaseResponseModel<List<CustomerResponseModel>> getAllCustomers() {      
        return new BaseResponseModel(List.of(new CustomerResponseModel(...), new CustomerResponseModel(...)));
    }

    // ...
}
用法示例:

public class BaseResponseModel<T> {
    
    private T response;
    private String status = "SUCCESS";
    private List<ErrorExtendedModel> errors = new ArrayList<>();
    

    public BaseResponseModel(T response) {
        this.response = response;
    }

    // ...
    
}
public class CustomerResponseModel {
            
    private String customerId;
    private String firstName;
    private String lastName;
    
    public CustomerResponseModel(String customerId, String firstName, String lastName) {      
        this.customerId = customerId;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // ...
}
public class RestApiController {
            
    public BaseResponseModel<CustomerResponseModel> getOneCustomer(String customerId) {      
        return new BaseResponseModel(new CustomerResponseModel(...));
    }

    public BaseResponseModel<List<CustomerResponseModel>> getAllCustomers() {      
        return new BaseResponseModel(List.of(new CustomerResponseModel(...), new CustomerResponseModel(...)));
    }

    // ...
}
公共类重启控制器{
public BaseResponseModel getOneCustomer(字符串customerId){
返回新的BaseResponseModel(新的CustomerResponseModel(…);
}
public BaseResponseModel getAllCustomers(){
返回新的BaseResponseModel(List.of(new CustomerResponseModel(…),new CustomerResponseModel(…));
}
// ...
}