Java Spring忽略了我的内容协商解决方案

Java Spring忽略了我的内容协商解决方案,java,json,spring,rest,spring-mvc,Java,Json,Spring,Rest,Spring Mvc,我正在构建一个简单的REST服务,它应该返回编码为JSON或JSON的数据(取决于客户端的请求)。我跟着 WEB-INF/config/config.xml: <beans ...> ... <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="favorPathExtension" value="true"

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

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 
    {
        ...
    }
}
公共类MappingJacksonJsonpView扩展了MappingJacksonJsonView
{
公共静态最终字符串DEFAULT\u CONTENT\u TYPE=“application/javascript”;
@凌驾
公共字符串getContentType(){
返回默认的内容类型;
}
@凌驾
公共void呈现(映射模型、HttpServletRequest请求、HttpServletResponse响应)
抛出异常
{
...
}
}
当我试图请求
http://localhost:8080/service/resource.jsonp
,但是Spring仍然会使用MappingJacksonJsonView(如日志所示),并返回编码为JSON的输出(而不是JSONP)

我做错了什么


如果我遗漏了一些重要的细节,请询问。我会马上更新这篇文章。

我认为您最好遵循spring.io上提供的教程:


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

本质上,这看起来是重复的问题是,我需要将响应封送到JSON中,而不是JSON中,以便能够绕过。在这种情况下,请使用此处提供的答案:谢谢。尽管这个解决方案(IMO)打破了MVC抽象规则(表示问题在控制器内部处理),但它似乎是目前用于基于Spring的REST服务的最佳解决方案。SpringDataREST确实提供了内置的JSONPConfig(),但SpringMVC似乎还不支持它。也许很快?