{
"phone":"该手机号码已经被注册了",
"code":"短信验证码不正确",
"username":"用户名不能为空",
"password":"密码不能为空",
"password_confirm":"确认密码不能为空"
}
后端的 RESTful 接口返回给 App 的,说是里面的键不固定(不同的业务错误的键是不一样的),没法获取到错误消息,我说你不能迭代一下吗?那边也没具体说,只是说要后端改消息格式。
其实我这样的错误格式是有目的的,前端的 Angularjs 获取到错误的时候,如果是 phone 有错误,就可以直接在 phone 的表单上可以直接高亮显示或者做一些提示。
想问一下这种难道很难处理?
1
gengrui 2015-11-05 14:33:11 +08:00 1
抛砖引玉, JsonObject 里面是有一个 HashMap 的,起码以我所知,除非事先知道有可能出现的 key ,否则没法取到 value 。
只能做: if(jsonObject.has("phone")){String errorMessage = jsonObject.getString("phone");} 希望有其他人提供其他办法。多多指教。 |
2
oott123 2015-11-05 14:34:39 +08:00 via Android
不难处理。
考虑方便处理和国际化问题,建议改成 [{name: "phone", should: "unique"}] 这种格式。 毕竟是一堆错误,用数组比较合适。 |
3
HentaiMew 2015-11-05 14:37:08 +08:00
好不专业啊…提供一个 code 区分错误不就行了 居然键都不同。。
如果是成功和错误两种情况键不同还可以理解,首先判断 http_status 即可。估计所有 stasu 都是 200 吧… |
4
Tr0y OP @HentaiMew
1. 即便用 code ,不也是不一样的 code 吗,跟不一样的键没有区别,其实我的 RESTful 接口是可以自定义 error 的格式的。 2. RESTful 是遵循 HTTP 协议的, 200 表示请求成功了,凡是发生错误都是使用不同的 HTTP STATUS 。 |
5
Tr0y OP @oott123
因为错误消息是服务端返回的,国际化的错误消息也是在服务端来做 translate, 根据用户的资料设置,客户端的 user agent ,客户端的 ip 等几个条件自动处理,而且项目没有涉及到国外业务,所以这个是不需要考虑的。 错误消息可以用数组,也没问题,但好像如果前面用不同的键, Android 那边就很难处理,觉得很怪异。 |
6
cxe2v 2015-11-05 14:47:50 +08:00
@Tr0y 用 code 是这样的格式{code :“ 1 ”, Message:"错误消息"},
这样键是固定了的,只需要区分 code 是哪个值就知道错误是什么,像你上面写的,是连键都没确定的 |
8
Tr0y OP 好吧,可能解析出那种格式很难,之前跟 Angularjs 和 iOS 做过项目,一直用这种格式,结贴吧。
|
9
HentaiMew 2015-11-05 15:14:15 +08:00 1
@Tr0y
code 错误不同的值是可以被枚举的,结构是固定的,但是不同的键是不可被枚举切结构不固定,是十分具有风险性的。 几乎没有服务端设计会出现这种情况,只能说服务端设计很糟糕。 有一种情况是可以让返回结构不相同,例如: http_status:200 {list:[{...},{...}]} http_status 非 200 {code : x, message : "xxx"} 这种情况下可以首先判断 http_status 再来对应解析相应结构,通常 RESTFul Client 都将对象的反序列化过程抽象掉了,根本无需关心返回中是否少了字段或者多了。 或者统一异常和成功结构,例如成功 {code : 0, message: "SUCCESS", data : {....}} 失败: {code : 错误码, message: "错误消息", data : null } |
10
peizh2006 2015-11-05 16:19:59 +08:00
这关 Android 什么事, google 下 json schema
|
11
tonyVex 2015-11-05 16:27:01 +08:00
[schema]( http://json-schema.org/)
|
12
zzzmode 2015-11-05 16:48:04 +08:00
既然是协议就应该双方都知道定义的数据格式和含义啊, key 都变了代码那有这么智能的就能知道是错误消息。。
|
13
a0000 2015-11-05 20:25:32 +08:00 via Android
可以处理,也不难,但是这么设计感觉很恶心,不知道是不是有啥高级用意
|
14
zhgg0 2015-11-05 20:28:13 +08:00
可以处理,像楼上说的,这种设计太恶心了。应该用 6 楼的格式,所有接口都统一
|