Java 向Jersey中的响应对象添加数据

Java 向Jersey中的响应对象添加数据,java,jersey,Java,Jersey,我试图使用一个方面向javax.ws.rs.core.Response添加一个时间戳,使用一个Around建议 我是爪哇岛和泽西岛的新手,我正在努力做到这一点。最接近我的是: Object output = proceed(); Method method = ((MethodSignature) thisJoinPoint.getSignature()).getMethod(); Type type = method.getGenericReturnType(); if (type == R

我试图使用一个
方面
javax.ws.rs.core.Response
添加一个时间戳,使用一个Around建议

我是爪哇岛和泽西岛的新手,我正在努力做到这一点。最接近我的是:

Object output = proceed();
Method method = ((MethodSignature) thisJoinPoint.getSignature()).getMethod();
Type type = method.getGenericReturnType();

if (type == Response.class)
{
    System.out.println("We have a response!");
    Response original = (Response) output;
    output = (Object)Response.ok(original.getEntity(String.class).toString()+ " " + Double.toString(duration)).build();
}

return output;

生成的响应类型始终是
应用程序/JSON
。基本上,我想在JSON中添加另一个字段,上面写着时间:

最简单的解决方案是让所有实体类扩展一个接口,该接口有一个方法
getTime()
setTime()
,然后您可以在拦截器中设置时间值,如下所示

public interface TimedEntity {
    long getTime();

    void setTime(long time);
}
你的真实实体

public class Entity implements TimedEntity {
    private long time;

    // Other fields, getters and setters here..

    @Override
    public long getTime() {
        return time;
    }

    @Override
    public void setTime(long time) {
        this.time = time;
    }
}
你的拦截器呢

Object output = proceed();
Method method = ((MethodSignature)thisJoinPoint.getSignature()).getMethod();
Type type = method.getGenericReturnType();

if (type == Response.class)
{
  System.out.println("We have a response!");
  Response original = (Response) output;
  if (original != null && original.getEntity() instanceof TimedEntity) {
    TimedEntity timedEntity = (TimedEntity) original.getEntity();
    timedEntity.setTime(duration);
  }

}else if (output instanceof TimedEntity) {
    TimedEntity timedEntity = (TimedEntity) output;
    timedEntity.setTime(duration);
}

return output;

最简单的解决方案是让所有实体类扩展一个接口,该接口有一个方法
getTime()
setTime()
,然后您可以在拦截器中设置时间值,如下所示

public interface TimedEntity {
    long getTime();

    void setTime(long time);
}
你的真实实体

public class Entity implements TimedEntity {
    private long time;

    // Other fields, getters and setters here..

    @Override
    public long getTime() {
        return time;
    }

    @Override
    public void setTime(long time) {
        this.time = time;
    }
}
你的拦截器呢

Object output = proceed();
Method method = ((MethodSignature)thisJoinPoint.getSignature()).getMethod();
Type type = method.getGenericReturnType();

if (type == Response.class)
{
  System.out.println("We have a response!");
  Response original = (Response) output;
  if (original != null && original.getEntity() instanceof TimedEntity) {
    TimedEntity timedEntity = (TimedEntity) original.getEntity();
    timedEntity.setTime(duration);
  }

}else if (output instanceof TimedEntity) {
    TimedEntity timedEntity = (TimedEntity) output;
    timedEntity.setTime(duration);
}

return output;