Spring:HttpMessageConverter基于HttpServletRequest的JSON响应

时间:2012-02-23 17:15:58

标签: java json spring http rest

我正在尝试创建一个Spring HttpMessageConverter:

  1. 能够在Jackson JSON HttpMessageConverter序列化程序和
  2. 之前运行
  3. 可以访问HTTPServletRequest上下文路径(request.getSession().getServletContext().getContextPath())。
  4. 我认为this Spring bug / feature请求类似,但我不确定如何将所有部分组合在一起。

    具体示例

    假设我有一个bean:

    public class AppIcon {
      private String url;
      public AppIcon(String url) { this.url = url; }
      public String getUrl() { return url; }
      public void setUrl(String url) { this.url = url; }
    }
    

    和一个Spring控制器:

    @Controller    
    public class IconController {
      private static AppIcon theIcon = new AppIcon("http://someurl.com/awesomeIcon");
    
      @ResponseBody
      @RequestMapping(value="/icon", method=RequestMethod.GET)  
      public AppIcon getIcon() {
        return theIcon;
      }
    }
    

    如果我正确配置Spring,我可以让Jackson将getIcon()的返回值序列化为JSON格式,可能类似于{url: "http://someurl.com/icon"}

    我正在寻找一种方法来注入一个消息转换器,这样我就可以将webapp的上下文路径包含在返回的AppIcon对象的url字段中,然后才能进入Jackson序列化。

    例如,如果我的应用程序在host.com/TestApp运行,并且我发出GET host.com/TestApp/icon之类的请求,我希望能够修改返回的AppIcon以获取网址/TestApp/awesomeIcon而不是http://someurl.com/awesomeIcon。然后当Jackson序列化AppIcon对象时,它将包含此URL而不是原始URL。

    注意:我想使用消息转换器,因此我不必修改可能直接或间接返回AppIcon的大量控制器方法。

    有办法做我想做的事吗?

0 个答案:

没有答案