我正在使用Jersey的集成Jackson处理将传入的JSON转换为POJO,例如:
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response newCustomer( CustomerRepresentation customer)
{
...
}
Run Code Online (Sandbox Code Playgroud)
如果客户端发送带有无效字段的JSON,则Jersey当前返回a 500 Internal Server Error.相反,我想返回一个400 Bad Request,最好有一些有意义的细节,表明哪些字段有误.
有关如何实现这一目标的任何见解?(至少返回一个通用的400而不是完全不合适的500?)
更新: 这是在调用我的处理程序之前在服务器端生成的异常:
javax.servlet.ServletException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException:
Unrecognized field "this_isnt_a_known"_field" (Class com.redacted....), not marked as ignorable
Run Code Online (Sandbox Code Playgroud)
Hol*_*osa 19
我终于能够解决这个问题,通过实现一个ExceptionMapper抓住UnrecognizedPropertyException杰克逊抛出的并将其映射到400 Bad Request响应:
@Provider
public class UnrecognizedPropertyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyException>
{
@Override
public Response toResponse(UnrecognizedPropertyException exception)
{
return Response
.status(Response.Status.BAD_REQUEST)
.entity( "'" + exception.getUnrecognizedPropertyName() + "' is an unrecognized field.")
.type( MediaType.TEXT_PLAIN)
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17099 次 |
| 最近记录: |