为所有响应定义公共基础Java模型的最佳方法是什么?
我需要将所有REST响应格式化为:为所有响应定义公共基础Java模型的最佳方法是什么?,java,json,pojo,Java,Json,Pojo,我需要将所有REST响应格式化为: { "response": {} "status": "ERROR" "error": { "status": "ERROR", "errors": [ { "type": "ERR
{
"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(…));
}
// ...
}