我是Java的新手,并使用jersey框架在netbeans中创建一些Restful服务。
我创建了许多GET,POST网络服务,它们具有不同类型的响应,这些响应基本上是模型对象,并且根据媒体类型,我正在获得JSON或XML。
有些响应只有一个对象,该对象在 {} 中以 JSON 形式显示,有些是 [] 中的列表。 我想查看所有 api 响应的通用响应格式。
示例-{"状态":"0 或 1", "message":"任何字符串消息","result":"它可以是单个对象或对象列表,根据每个 Web 服务响应,它是动态的"}。
由于在java中我们需要创建模型对象来获取响应,因此我创建了一个具有状态属性,消息属性但不知道结果属性的ResponseModel,因为有时它可以具有单个对象或有时列表,因此我应该为此属性设置什么类型,以便我可以为此分配任何内容,并且响应将始终采用与JSON相同的格式或 XML。
我创建了一个带有构造函数的静态方法,该方法采用所有这三个参数并创建一个 ResponseModel 对象。
提前致谢
编辑 - 使用"对象"作为泛型类型后的代码
public static Response getResponseObjectIsValid(boolean isValid, String message,Object result)
{
if (isValid == true) {
LGSResponse response = new LGSResponse();
response.setStatus(1);
response.setMessage(message.length()>0 ? message : "Success");
response.setResult(result);
return Response.status(Status.OK).entity(response).build();
}
else
{
LGSResponse response = new LGSResponse();
response.setStatus(1);
response.setMessage(message.length()>0 ? message : "Failed");
response.setResult(result);
return Response.status(Status.OK).entity(response).build();
}
}
结果参数是一个普通的模型对象。
您可以简单地按照您所说的创建您的类。
public class ResponseModel {
int status;
String message;
Object result;
// contructor, getters, setters go here...
// (probably consider using lombok, but that is a story for another time)
}
然后你可以传递单个对象或数组作为第三个参数,json/xml 序列化程序应该为你处理转换,除非你的对象非常复杂(我很少遇到这个问题)
例如,您的 Jersey 方法如下所示:
// returning a single object within the response model
@GET
@Path("/myMethod")
public Response aJerseyMethod() {
Book aBookObject = new Book("The Title", "Name of Author");
ResponseModel responseModel = new ResponseModel(1, "This is a book", aBookObject);
return Response.ok(responseModel)
.build();
}
// returning an array within the response model
@GET
@Path("/myOtherMethod")
public Response anotherJerseyMethod() {
Book aBookObject = new Book("The Title", "Name of Author");
Book anotherBookObject = new Book("The Other Title", "Name of another Author");
ArrayList<Book> aBookArray = new Arraylist();
aBookArray.add(aBookObject);
aBookArray.add(anotherBookObject);
ResponseModel responseModel = new ResponseModel(1, "These are books", aBookArray);
return Response.ok(responseModel)
.build();
}
在这两种情况下,您都应该获得您所谈论的预期输出,并且您不必自己进行任何其他检查或转换。
我刚刚在这里写了这个,所以用你自己的类而不是"Book"(这不是一个真正的类)来尝试它,并让我知道它是否有效。
不应在 json 正文中维护状态代码、消息和结果。
- 响应消息应仅包含该 API 的结果。
- httpstatus 代码将是状态代码(Ex.200 表示成功,404 未找到)
- 所有其他信息都应保留在响应标头中,而不是在 json 正文中