如何实现Jersey中间件以进行JSON实体请求主体的自定义处理

时间:2018-07-02 23:05:43

标签: java jackson jersey dropwizard

我想记录我的 Dropwizard 应用程序中所有资源的所有POST请求的JSON请求实体主体。问题在于,我需要解析请求的类型,制作实体的副本,并在记录实体之前进行一些自定义请求字段的格式化。我也无法以任何方式更改请求的类或字段的类(即使带有注释)。

在请求传递到资源中之前,我如何利用Jersey和Jackson用来解析Java POJO类类型的逻辑?

我应该使用过滤器拦截器还是 EventListener 实现?

// I need to create raw JSON for instances of this class where fields
// of type Location get specially formatted but only for logging.
// i.e doesn't affect normal structure of the request
class CustomRequest {
    // In the raw JSON i create this field's name should be converted
    // to 'origin_geo' and its value should be a float with the first
    // value being the longitude and the second element being the 
    // latitude.
    public Location origin;

    public String otherField;
}

interface Location {
    float getLongitude();
    float getLatitude();    
}

对于其他利用中间件的应用程序,我想避免需要为每种不同的请求类型创建特殊的代码。我想要一种通用的东西,它能够识别任何实体的位置类型字段,并简单地序列化该实体,但对这些位置类型字段进行修改。

有人知道使用这些框架进行此操作的正确方法吗?我认为,通过查看方法的参数并选择满足某些条件的第一个参数,Jersey能够使用反射来解析资源方法。我想避免重新实现这一点。

0 个答案:

没有答案