Java Spring 4.1.4和Jackson 2.5,注释驱动的设置未将REST响应转换为JSON

Java Spring 4.1.4和Jackson 2.5,注释驱动的设置未将REST响应转换为JSON,java,json,spring,rest,spring-mvc,Java,Json,Spring,Rest,Spring Mvc,在花了5年时间做其他事情之后,我回到了春天。我有一个初始项目,它旨在提供一个返回JSON的HTTP REST服务 我的问题是,我无法让服务将响应转换为JSON。相反,我会出现如下错误: javax.servlet.ServletException: Circular view path [hello]: would dispatch back to the current handler URL [/hello] again. Check your ViewResolver setup! (Hi

在花了5年时间做其他事情之后,我回到了春天。我有一个初始项目,它旨在提供一个返回JSON的HTTP REST服务

我的问题是,我无法让服务将响应转换为JSON。相反,我会出现如下错误:

javax.servlet.ServletException: Circular view path [hello]: would dispatch back to the current handler URL [/hello] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:205) ~[spring-webmvc-4.1.4.RELEASE.jar:4.1.4.RELEASE]
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:145) ~[spring-webmvc-4.1.4.RELEASE.jar:4.1.4.RELEASE]
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) ~[spring-webmvc-4.1.4.RELEASE.jar:4.1.4.RELEASE]
... 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
    <param-name>contextClass</param-name>
    <param-value>
        org.springframework.web.context.support.AnnotationConfigWebApplicationContext
    </param-value>
</context-param>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>au.com.abc.service</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>fxServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>au.com.abc.controller</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>fxServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
@RestController
public class FXRESTController {

@RequestMapping(value = "/hello")
public Map<String,Object> rootContextHandler() {
    Map<String,Object> data = new HashMap<>();
    data.put("X", "abc");
    return data;
}
}
<servlet-mapping>
    <servlet-name>fxServlet</servlet-name>
    <url-pattern>/webapp/*</url-pattern>
</servlet-mapping>
My web.xml如下所示:

javax.servlet.ServletException: Circular view path [hello]: would dispatch back to the current handler URL [/hello] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:205) ~[spring-webmvc-4.1.4.RELEASE.jar:4.1.4.RELEASE]
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:145) ~[spring-webmvc-4.1.4.RELEASE.jar:4.1.4.RELEASE]
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) ~[spring-webmvc-4.1.4.RELEASE.jar:4.1.4.RELEASE]
... 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
    <param-name>contextClass</param-name>
    <param-value>
        org.springframework.web.context.support.AnnotationConfigWebApplicationContext
    </param-value>
</context-param>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>au.com.abc.service</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>fxServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>au.com.abc.controller</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>fxServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
@RestController
public class FXRESTController {

@RequestMapping(value = "/hello")
public Map<String,Object> rootContextHandler() {
    Map<String,Object> data = new HashMap<>();
    data.put("X", "abc");
    return data;
}
}
<servlet-mapping>
    <servlet-name>fxServlet</servlet-name>
    <url-pattern>/webapp/*</url-pattern>
</servlet-mapping>
这对我来说意味着它试图呈现一个JSTL视图。为什么-考虑到我要求JSON,我不知道

知道我做错了什么吗

我读过很多博客,到目前为止,我看不出他们所做的和我所做的有什么区别

哦,这里是我的gradle解决依赖项:


使用
@ResponseBody
。 也不要将所有请求直接发送给spring

<servlet-mapping>
    <servlet-name>fxServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
其他请求可以用不同的方式处理。因此,您可以用不同的方式处理请求,而不依赖于spring。如

http://localhost:8080/Proj/servlethandler

上面的请求不会进入spring,可以被servlet等截获。

您只有一个控制器,它对启用JSON没有任何作用

您必须有一个
@Configuration
注释类,该类还带有注释,才能启用自动JSON转换。另请参见参考指南的一节

@Configuration
@EnableWebMvc
public class WebConfiguration {}

您运行的是非常基本的。

您的控制器是这样的还是您的实际控制器…这是控制器中的一部分代码减去导入,等等。您似乎只有一个控制器,它对启用JSON没有任何作用。您必须有一个
@Configuration
注释类,该类还带有
@EnableWebMvc
注释,才能启用自动JSON转换。您使用的是非常基本的
DispatcherServlet
默认值。啊,让我试试,我没有学过:-(您的传奇!成功了。非常感谢。