Zero system provide simple error define for user.
In your class path, create a new up.god.file named vertx-error.yml
,the format is as following:
E100001: User defined Error {0}, details = {1}
The detail implementation used MessageFormat, do not support named parameters.
Create new class that you wanted as following
import io.horizon.exception.WebException;
public class TestRequestException extends
WebException {
public TestRequestException(final Class<?> clazz,
final String name,
final String detail) {
super(clazz, name, detail);
}
@Override
public int getCode() {
return -100001;
}
}
-
Please ignore the first parameter
Class<?>
, it's for Zero to detect the error happened class position; -
The rest parameters could be pass any length, you could call
super(clazz, arg0, arg1, ...)
-
Be sure to write the
getCode()
method, this method must be match with thevertx-error.yml
prefix:E<code>
as message key -
If you want to change HttpStatusCode, you could overwrite
getStatus()
as following:public HttpStatusCode getStatus() { // Default exception for 400 return HttpStatusCode.BAD_REQUEST; }
Then in your code, write following code:
@Address("ZERO://USER")
public Envelop reply(final Envelop message) {
final User user = message.data(User.class);
final WebException error = new TestRequestException(getClass(),
"Lang", "Detail");
return Envelop.failure(error);
}
You'll see following error response:
{
"code": -100001,
"message": "[ERR-100001] (UserWorker) ZeroException occurs: User defined Error Lang, details = Detail."
}