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) {
我有一个休息服务,如果我有一个示例方法 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) {