我是java的新手,并使用jersey framework在netbeans中创建一些Restful服务。
我创建了许多GET,POST Web服务,这些服务具有不同类型的响应,基本上是模型对象,并且根据媒体类型,我得到JSON或XML。
有些响应只有一个对象在{}中显示在JSON中,有些是在[]中的列表。 我希望看到所有api响应的通用响应格式。
示例 - {" status":" 0或1"," message":"任何字符串消息","结果": "它可以是单个对象或动态对象列表,具体取决于每个Web服务响应"}。
因为在java中我们需要创建模型对象以获取响应所以我创建了一个ResponseModel,它具有status属性,message属性但不知道result属性的类型,因为有时它可以有一个对象或某个时候一个列表,所以我应该为这个属性设置什么类型,以便我可以为此分配任何东西,并且响应将始终采用相同的JSON或XML格式。
我用构造函数创建了一个静态方法,它接受所有这三个参数并创建一个ResponseModel对象。
提前致谢
EDITED-使用后的代码"对象"作为通用类型
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();
}
}
结果参数是普通模型对象。
答案 0 :(得分:2)
你可以像你说的那样简单地创建你的课程。
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”(这不是真正的课程)试试,如果有效的话请告诉我。
答案 1 :(得分:0)
您不应该在json正文中维护状态代码,消息和结果。