Spring 4.2.1 RestController пытался вернуть шаблон вместо возврата JSON

Я попытался создать контроллер Spring Rest, на основе этого примера я создаю контроллер как это.

РазработчикRestController.java

@RestController
public class DeveloperRestController {
    
    @RequestMapping("/developer/list")
    public Developer index() {
        Developer developer = new Developer("Developername", "[email protected]");
        return developer;
    }
}

веб.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>

диспетчер-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 не найдена, кажется, весна пыталась загрузить шаблон...

Результат:

Ошибка 404 /WEB-INF/jsp/developer/list.jsp

что я должен делать?


person zho    schedule 02.10.2015    source источник
comment
добавить <mvc:annotation-driven />.   -  person M. Deinum    schedule 02.10.2015
comment
У вас есть Джексон на пути к классам?   -  person Kevin Bayes    schedule 02.10.2015
comment
У вас есть Джексон на пути к классам? Вам нужны 3 вещи: преобразователь json jackson view, jackson mapper и добавьте mvc:annotation-driven.   -  person Kevin Bayes    schedule 02.10.2015


Ответы (2)


Похоже, у вас проблема с конфигурацией. Образец, на котором вы основываетесь, основан на весенней загрузке. Таким образом, он обрабатывает конфигурацию для вас. Чтобы заставить вас работать, вам нужно будет добавить jackson в путь к классам. Если вы используете maven, то:

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

Затем вам нужно изменить конфигурацию Spring, чтобы включить:

<mvc:annotation-driven />

Из весенней документации:

Приведенное выше регистрирует RequestMappingHandlerMapping, RequestMappingHandlerAdapter и ExceptionHandlerExceptionResolver (среди прочего) для поддержки обработки запросов с помощью аннотированных методов контроллера с использованием таких аннотаций, как @RequestMapping, @ExceptionHandler и других.

Это также затем включает MappingJackson2HttpMessageConverter, если jackson 2 находится в вашем пути к классам.

Рекомендации:

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-enable

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

http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/ (это кажется более подходящим для вас, чтобы начать работу в зависимости от вашей проблемы)

person Kevin Bayes    schedule 02.10.2015
comment
Возможно, OP также следует сузить свое отображение sitemash. Остальные ответы перенаправляются через sitemesh? - person Dirk Lachowski; 02.10.2015
comment
Действительная точка. Также рассмотрите возможность исключения URL-адресов ваших остальных ресурсов из фильтра sitemesh. - person Kevin Bayes; 02.10.2015
comment
да, возможно, у меня проблема с конфигурацией, «теперь он показывает, что для возвращаемого значения типа не найден конвертер» - person zho; 02.10.2015
comment
Там написано какие типы? - person Kevin Bayes; 02.10.2015
comment
да, это объект java pojo, и я добавляю «jackson-mapper-asl» к пути зависимостей, и теперь он разрешен ... спасибо @KevinBayes - person zho; 02.10.2015
comment
Вы также можете попробовать старые библиотеки Джексона: org.codehaus.jackson:jackson-mapper-asl:1.9.13 - person Kevin Bayes; 02.10.2015

С @ResponseBody Spring будет обрабатывать нужный вам JSON. Также требуется библиотека Джексона.

@RestController
public class DeveloperRestController {
    @RequestMapping("/developer/list")
    public @ResponseBody Developer index() {
        Developer developer = new Developer("Developername",  "[email protected]");
        return developer;
    }
}
person André Blaszczyk    schedule 02.10.2015