Spring忽略了我的ContentNegotiatingViewResolver

时间:2013-11-11 15:57:32

标签: java json spring rest spring-mvc

我正在构建一个简单的REST服务,它应该返回编码为JSON或JSONP的数据(取决于客户端请求的内容)。我跟着the tutorial on vivin.net

WEB-INF / config / config.xml

<beans ...>
  ...
  <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="favorPathExtension" value="true"/>
    <property name="mediaTypes">
      <map>
        <entry key="json" value="application/json" />
        <entry key="jsonp" value="application/javascript" />
      </map>
    </property>
    <property name="defaultViews">
      <list>
        <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
        <bean class="cz.dusanrychnovsky.utils.json.MappingJacksonJsonpView" />
      </list>
    </property>
  </bean>
</beans>

MappingJacksonJsonpView.java

public class MappingJacksonJsonpView extends MappingJacksonJsonView
{
    public static final String DEFAULT_CONTENT_TYPE = "application/javascript";

    @Override
    public String getContentType() {
        return DEFAULT_CONTENT_TYPE;
    }

    @Override
    public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) 
        throws Exception 
    {
        ...
    }
}

当我尝试请求http://localhost:8080/service/resource.jsonp时,Spring仍然会使用MappingJacksonJsonView(如日志所示)并返回编码为JSON(而不是JSONP)的输出。

我做错了什么?

如果我遗漏了一些重要细节,请向他们索取。我马上就会更新帖子。

1 个答案:

答案 0 :(得分:1)

我认为你可能会更好地遵循spring.io提供的教程:

http://spring.io/guides/gs/rest-service/

如果您使用的是最新版本的Spring,它会自动执行Jackson编组。所以你不应该有上面的任何代码。