Spring: ответ JSON HttpMessageConverter на основе запроса HttpServletRequest - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь создать Spring HttpMessageConverter, который:

  1. может работать до сериализатора Jackson JSON HttpMessageConverter и
  2. имеет доступ к контекстному пути HTTPServletRequest (request.getSession().getServletContext().getContextPath()).

Я думаю, этот Запрос об ошибке / функции Spring похож, но я не уверен, как собрать все части вместе.

Конкретный пример

Предположим, у меня есть боб:

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, Джексон сможет сериализовать возвращаемое значение из getIcon () в формат JSON, возможно, что-то вроде {url: "http://someurl.com/icon"}.

Я ищу способ внедрить конвертер сообщений, чтобы я мог включить путь контекста веб-приложения в поле URL возвращаемого объекта AppIcon до того, как он попадет в сериализацию Джексона.

Например, если мое приложение работает на host.com/TestApp, и я делаю запрос, такой как GET host.com/TestApp/icon, я хочу иметь возможность изменить возвращенный AppIcon, чтобы иметь URL /TestApp/awesomeIcon вместо http://someurl.com/awesomeIcon. Затем, когда Джексон сериализует объект AppIcon, он будет включать этот URL вместо исходного.

Примечание. Я хочу использовать конвертер сообщений, поэтому мне не нужно изменять большое количество методов контроллера, которые могут прямо или косвенно возвращать AppIcon.

Есть ли способ сделать то, что я хочу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...