84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
我现在的问题是我需要将某项业务,通过封装为get请求,供其他用户来调用,这样就有一个问题,我应该如何设计这个请求的返回结果的格式?因为有多种类型的返回结果,所以将每种返回结果存放到不同的字段,我现在想到的是给一个flag字段,但是需要调用者根据flag来判断展示结果中的哪个字段,不知道有没有什么更加优雅的实现方式。
认证高级PHP讲师
利用泛型定义一个返回对象
public class ServiceResult<T> { private String msg="";//消息说明 private int resultCode=0;//结果消息代码 private T data;//返回的数据字段 public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public int getResultCode() { return resultCode; } public void setResultCode(int resultCode) { this.resultCode = resultCode; } public T getData() { return data; } public void setData(T data) { this.data = data; } } /** * * 一个service对象 */ public class MyServices { public List<User> getUserList(){ return new ArrayList<User>(); } public User getUserByID(Long userId){ return new User(); } } /** * user */ class User{ private String name; private Long id; public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } } /** * request调用 */ public class UserRequestObject { public void doReuest(String requestType){ MyServices someMyServices=new MyServices(); if(requestType.equals("userList")){ ServiceResult<List<User>> result=new ServiceResult<List<User>>(); result.setData(someMyServices.getUserList()); }else if (requestType.equals("user")){ ServiceResult<User> result=new ServiceResult<User>(); result.setData(someMyServices.getUserByID(0L)); }else{ ServiceResult<Void> result=new ServiceResult<Void>(); result.setData(null); } //数据转成JSON格式,返回给调用者 } }
一般来说可以定义一个如下的返回格式。resultCode定义了多种返回类型,比如除了resultCode为0其他均为错,且errorMsg有具体说明,正常业务的返回对象由result描述,在里面我们可以定义正常逻辑的多种返回类型,比如可以用resultType表示不同的类型,多个字段分别包装不同类型结果,如果差别不大,不一定需要多个字段,一个字段即可(里面的字段内容可以为null)。
resultCode
0
errorMsg
result
resultType
null
{ String resultCode; String errorMsg; Object result; } result描述: { String resultType; ResultForm resultForm; }
如果是http,可以利用header传递请求要的格式,然后接口判断对应返回响应的格式。非http的也类似,调用方给出要的格式或字段,服务方根据标识相应给出不同的结果即可。
{ String code; String msg; Object result; }
利用泛型定义一个返回对象
一般来说可以定义一个如下的返回格式。
resultCode
定义了多种返回类型,比如除了resultCode
为0
其他均为错,且errorMsg
有具体说明,正常业务的返回对象由result
描述,在里面我们可以定义正常逻辑的多种返回类型,比如可以用resultType
表示不同的类型,多个字段分别包装不同类型结果,如果差别不大,不一定需要多个字段,一个字段即可(里面的字段内容可以为null
)。如果是http,可以利用header传递请求要的格式,然后接口判断对应返回响应的格式。非http的也类似,调用方给出要的格式或字段,服务方根据标识相应给出不同的结果即可。