1. Введение
Что мы сделали с BeanNameViewResolver , так это то, что мы только что создали несколько представлений bean-компонентов в контексте Spring для генерации ожидаемого результата. Вскоре Spring представил стратегию согласования контента , в которой мы можем использовать традиционный подход RESTful @ResponseBody и конвертеры HTTP-сообщений, чтобы возвращать желаемые выходные данные в формате JSON или XML, а также некоторую гибкость и динамичность, которые он обеспечивает в конфигурации.
Часто нам необходимо предоставить несколько представлений (или представлений) одних и тех же данных, возвращаемых контроллером. Это очень элегантно достигается с помощью согласования контента весной.
2. Реализация
Чтобы быстро начать реализацию, давайте сначала создадим новый проект maven. Нажмите здесь, чтобы получить помощь по созданию вашего нового проекта Maven в Eclipse
Давайте теперь добавим необходимые зависимости в файл pom.xml .
pom.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<!-- Spring dependencies --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.1.RELEASE</version></dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.1.RELEASE</version></dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.1.RELEASE</version></dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.2.6</version></dependency><dependency> <groupId>javax.xml</groupId> <artifactId>jaxb-impl</artifactId> <version>2.1</version></dependency> <!-- Jackson JSON Processor --><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.1</version></dependency> |
Откройте web.xml и убедитесь, что вы правильно настроили конфигурацию.
web.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version="1.0" encoding="ISO-8859-1"?> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee id="WebApp_ID" version="2.5"> <display-name>SpringMVCWithContentNegotiation</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> |
Создайте новый файл контекста с именем <servlet name> -servlet.xml , который должен быть mvc-dispatcher-servlet.xml со следующим содержимым.
MVC-диспетчерская-servlet.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"> <mvc:path-matching registered-suffixes-only="true" /> </mvc:annotation-driven> <context:component-scan base-package="com.jcombat.controller" /> <!-- To disable path extension check in the path variable of URI --> <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <property name="favorPathExtension" value="true" /> <property name="ignoreAcceptHeader" value="true" /> <property name="useJaf" value="false"/> <property name="defaultContentType" value="application/json" /> <property name="mediaTypes"> <map> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </map> </property> </bean> <!-- For Other media types --> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans> |
Обратите внимание, что компонентное сканирование применяется только к пакету com.jcombat.controller, поэтому Spring может автоматически определять контроллер приложения.
При выполнении HTTP-запроса мы можем указать, какой тип ответа мы хотели бы получить, установив свойство заголовка Accept . Но из-за неправильной работы браузеров с заголовками Accept мы в основном предпочитаем игнорировать заголовки Accept в веб-приложениях на основе Spring, которые возвращают выходные данные в форматах, отличных от HTML.
При использовании Java Activation Framework (JAF) нам не нужно явно указывать сопоставления медиа-типов, вместо этого это делается неявно с помощью JAF. Чтобы использовать JAF, нам может потребоваться добавить дополнительную зависимость от activ.jar . Вероятно, мы просто хотим поддерживать два выходных формата, то есть JSON и XML, поэтому мы отказываемся от него и предпочитаем явно указывать отображения медиа-типов.
Теперь пришло время написать контроллер, который должен быть таким, как указано ниже.
EmployeeController.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
package com.jcombat.controller; import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody; import com.jcombat.bean.Employee; @Controllerpublic class EmployeeController { @RequestMapping(value = "/employeeData", method = RequestMethod.GET, produces={"application/xml", "application/json"}) public @ResponseBody Employee getEmployee() { Employee employee = new Employee(); employee.setEmailId("abc@gmail.com"); employee.setEmpId("123"); employee.setName("Ajit"); return employee; }} |
3. Полезные ссылки
4. Запуск приложения
Когда мы запускаем приложение, мы видим следующее.
Выход JSON
Вывод XML
5. Загрузите исходный код
| Ссылка: | Переговоры по контенту в Spring Framework от нашего партнера JCG Абхиманью Прасада в блоге jCombat . |

