Jackson 验证输入 json 对象

Jackson validate input json object

我有一个休息服务,如果我有一个示例方法 POST,它消耗 application/json,并且该方法的参数是另一个 class,它描述了require json 有没有办法让杰克逊在输入方法之前验证输入 json ? 这是一个小代码:

@PUT
@Consumes("application/json")
public UserDataResourceObject login(UserResourceObject userResourceObject)
{
    Query query = getEm().createNamedQuery("User.authorize");
    if (userResourceObject == null)
    {
        throw new WebApplicationException(Response.Status.BAD_REQUEST);
    }
    query.setParameter("username", userResourceObject.getUsername());
    query.setParameter("password", Utility.getMD5Value(userResourceObject.getPassword()));
    Exception e = null;
    try
.................

而 UserResourceObject 描述了这个结构:

{
  "username" : "admin",
  "password" : "123456"
}

如果我更改 jackson 上面的 json 的结构,我想抛出一个示例 400(错误请求)的异常。我该怎么做?

您可以使用 Bean Validation (JSR 303) 来验证您收到的数据。 您有 http://bval.apache.org/ and http://hibernate.org/validator/ 个实现。

那么你可以这样做:

@PUT
@Consumes("application/json")
public UserDataResourceObject login(@Valid UserResourceObject userResourceObject) {