Skip to content

Latest commit

 

History

History
75 lines (54 loc) · 1.93 KB

d10094-exception-defined-your-errors.md

File metadata and controls

75 lines (54 loc) · 1.93 KB

D10094 - Exception, Defined your Errors

Zero system provide simple error define for user.

1. Configuration

In your class path, create a new 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.

2. Create Class

Create new class that you wanted as following

import io.vertx.up.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 the vertx-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;
          }

3. Build Envelop with Error

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);
    }

4. Running the App

You'll see following error response:

{
    "code": -100001,
    "message": "[ERR-100001] (UserWorker) ZeroException occus: User defined Error Lang, details = Detail."
}