当前位置: 首页 > 知识库问答 >
问题:

Spring 4.2.1 Rest控制器尝试返回模板而不是返回JSON

皇甫礼骞
2023-03-14

我试图创建一个Spring Rest控制器,基于这个例子我创建了一个这样的控制器。

DeveloperRestController.java

@RestController
public class DeveloperRestController {
    
    @RequestMapping("/developer/list")
    public Developer index() {
        Developer developer = new Developer("Developername", "developer@yahoo.com");
        return developer;
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> <!--Here we specify about the DispatcherServlet class in the Web Deployment Descriptor-->

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
    </context-param>
</web-app>

dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation=" http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <context:component-scan base-package="com.developerdata.controller" />
    <context:annotation-config />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

但是它显示404页没有找到,似乎是spring试图加载一个模板...

结果:

错误404/we b-INF/JSP/developer/list . JSP

我该怎么办?

共有2个答案

公德明
2023-03-14

有了@ResponseBody,Spring将处理你需要的JSON。杰克逊图书馆也是必需的。

@RestController
public class DeveloperRestController {
    @RequestMapping("/developer/list")
    public @ResponseBody Developer index() {
        Developer developer = new Developer("Developername",  "developer@yahoo.com");
        return developer;
    }
}
齐嘉庆
2023-03-14

看起来您有配置问题。您所依据的示例是基于spring boot的。所以它为您处理配置。要使您的工作正常,您需要将jackson添加到类路径中。如果使用maven,则:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.2</version>
</dependency>

然后,您需要修改您的spring配置,以包括:

<mvc:annotation-driven />

从Spring留档:

上述方法注册了一个请求映射处理程序映射、一个请求映射处理程序适配器和一个异常处理程序异常解决器(以及其他),以支持使用注释(如@RequestMapping、@ExceptionHandler等)使用带注释的控制器方法处理请求。

如果jackson 2在您的类路径中,这也会启用mapping Jackson 2 httpmessageconverter。

参考文献:

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-配置启用

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

http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/(根据您的问题,这个似乎更适合您入门)

 类似资料:
  • 我试图让2支球队互相比赛。当我说团队1.玩(团队2)时,我称之为;当 i 生成的数字小于 0.5 时,team2 应获胜,如果大于 0.5,则团队 1 应获胜。当团队 1 获胜时,它会正确显示为尼克斯,但当团队 2 获胜时,它会显示内存地址。我怎么能让它正确地说网是赢的,而不是team@78987neu73

  • 你好,我是拉威尔的新手,也许这对你们来说太傻了。在laravel 8中,路由web。php我创建了一条如下的路线: 我想问的是,我们也可以从回调视图返回控制器吗?所以在路由 /editprofile中,第二个参数不是'App\Http\Controller\SiteController@edit_profile',而是一个回调函数,如路由'/home'。 但是它返回错误哈哈。假设我不想用__con

  • 编辑问题以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。这将有助于其他人回答这个问题。 代码不返回值,而是返回“?”。编译时我没有遇到任何错误。请协助。 代码需要返回需要支付的剩余金额。输出代码1代码2代码3代码4

  • 下面,您可以看到一个Java Card程序,它充当8字节随机数生成器: 这个程序在NetBeans IDE中成功地转换为。cap文件,但是当我想用Eclipse IDE执行同样的操作时,它返回以下错误来响应我转换applet的请求: 错误:randgen:空包。 你知道吗?

  • 我有一个Spring控制器,它正在向我脚本中存在的ajax调用发送JSON响应。我在控制器方法中使用了@响应体,当通过ajax调用调用JSON时,它直接发送JSON作为响应。 在我添加JsonSanitizer之后。sanitize(myJsonString),它在ajax响应中作为html返回,而不是JSON。因此,我现在无法解析json对象。 示例代码: 在上面添加新行之后,响应以html而不

  • 问题内容: 这是我的发件人实体 当我尝试执行以下查询时: 发生以下错误: 错误:org.hibernate.property.BasicPropertyAccessor- HHH000123:类中的IllegalArgumentException:be.gimme.persistence.entities.Sender,属性的设置方法:senderId 错误:org.hibernate.prope