Spring Restful Web服务XML示例

时间:2020-02-23 14:36:00  来源:igfitidea点击:

在本教程中,我们将看到Spring Restful Web服务XML示例。

在本教程中,我们将看到Spring Restful Web服务,它将返回XML为示例。

以下是创建一个简单的Spring Restful Web服务的步骤将返回XML。

1)使用Maven在Eclipse中创建动态Web项目。

2)对于XML支持,我们只需要确保JAXB jar在类路径中使用。

pom.xml将如下:pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.igi.theitroad</groupId>
  <artifactId>SpringRestfulWebServicesWithJSONExample</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>SpringRestfulWebServicesWithJSONExample Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.1.0</version>
  </dependency>
 
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${spring.version}</version>
  </dependency>
 
 </dependencies>
 <build>
  <finalName>SpringRestfulWebServicesWithJSONExample</finalName>
 
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
     <source>${jdk.version}</source>
     <target>${jdk.version}</target>
    </configuration>
   </plugin>
  </plugins>
 
 </build>
 <properties>
  <spring.version>4.2.1.RELEASE</spring.version>
  <jdk.version>1.7</jdk.version>
 </properties>
</project>

Spring应用程序配置:

3)更改Web.xml如下:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
 
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
 <servlet-name>springrest</servlet-name>
 <servlet-class>
  org.springframework.web.servlet.DispatcherServlet
 </servlet-class>
 <load-on-startup>1</load-on-startup>
</servlet>
 
<servlet-mapping>
 <servlet-name>springrest</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

4)在/Web-Inf /文件夹中创建名为springrest-servlet.xml的XML文件。
请更改上下文:组件扫描如果要使用不同的套装来搜索控制器。
请参阅Spring MVC Hello World示例以获取更多的理解。

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc" 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-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
<context:component-scan base-package="org.igi.theitroad.controller" 
 
</beans>

创建bean类

5)在org.igi.theitroad.Bean中创建bean名称"country.java"。

package org.igi.theitroad.bean;
 
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement(name="country")
public class Country{
 
	private int id;
	private String countryName; 
 
	public Country() {
 
	}
	public Country(int i, String countryName) {
		super();
		this.id = i;
		this.countryName = countryName;
	}
 
	@XmlElement
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
 
	@XmlElement
	public String getCountryName() {
		return countryName;
	}
	public void setCountryName(String countryName) {
		this.countryName = countryName;
	}  
}

我们需要使用@xmlrootelement和@xmlElement注释bean类以支持XML。
正如我们所看到的,我们已经使用JAXB注释带注释的国家级类,但如果我们想要支持列表,我们无法编辑arraylist类,所以我们可以创建另一个名为converylist的类,我们可以通过该类中的jAXB注释注释,以支持XML输出。
CourtryList.java.

package org.igi.theitroad.bean;
 
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement(name = "country-list")
public class CountryList {
 
	ListlistOfCountries;
 
	public CountryList() {
		super();
	}
	public CountryList(ListlistOfCountries) {
		this.listOfCountries=listOfCountries;
	}
	public ListgetListOfCountries() {
		return listOfCountries;
	}
 
	@XmlElement(name = "country")
	public void setListOfCountries(ListlistOfCountries) {
		this.listOfCountries = listOfCountries;
	}
 
}

创建控制器

6)创建名为"countrycontroller.java"的控制器

package org.igi.theitroad.controller;
 
import java.util.ArrayList;
import java.util.List;
 
import org.igi.theitroad.bean.Country;
import org.igi.theitroad.bean.CountryList;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class CountryController {
 
	@RequestMapping(value = "/countries", method = RequestMethod.GET,headers="Accept=application/xml")
	public CountryList getCountries()
	{
		CountryList countryList=createCountryList();
		return countryList;
	}
 
	@RequestMapping(value = "/country/{id}", method = RequestMethod.GET)
	public Country getCountryById(@PathVariable int id)
	{
		ListlistOfCountries = new ArrayList();
		CountryList countryList=createCountryList();
		listOfCountries=countryList.getListOfCountries();
		for (Country country: listOfCountries) {
			if(country.getId()==id)
				return country;
		}
 
		return null;
	}
 
	///Utiliy method to create country list.
	public CountryList createCountryList()
	{
		Country NetherlandsCountry=new Country(1, "Netherlands");
		Country chinaCountry=new Country(4, "China");
		Country nepalCountry=new Country(3, "Nepal");
		Country bhutanCountry=new Country(2, "Bhutan");
 
		ListlistOfCountries = new ArrayList();
		listOfCountries.add(NetherlandsCountry);
		listOfCountries.add(chinaCountry);
		listOfCountries.add(nepalCountry);
		listOfCountries.add(bhutanCountry);
		return new CountryList(listOfCountries);
	}
}

@PathVariable:用于将来自URL的值注入方法参数。
我们在getCountrybyID方法中注入的方式。

我们没有提供任何View Information inspringrest-servlet.xml,因为我们在Spring MVC中做到了。
如果我们需要直接从控制器获取资源,我们需要根据Spring 3返回@ResponseBody,但使用Spring 4,我们可以使用@RestController。

在Spring 4.0中,我们可以使用@Controller + @ResponseBody的组合@RestController。

@RestController = @Controller + @ResponseBody

6)这是时候建立了Maven的时间。

右键单击项目 - >运行AS - > Maven Build

7)将目标作为清洁安装(下面给出),然后单击运行

运行应用程序

8)右键单击"项目 - >在服务器上运行"

选择Apache Tomcat,然后单击"完成"

运行应用程序时,我们可能会得到这种警告

Mar 26, 2015 1:45:51 AM org.springframework.web.servlet.PageNotFound noHandlerFound
WARNING: No mapping found for HTTP request with URI [/SpringRestfulWebServicesWithXMLExample/] in DispatcherServlet with name 'SpringRestfulWebServicesWithJSONExample'

请忽略上面的警告。
如果启动应用程序,如果我们没有提供开始页面:http://localhost:8080/springrestfulwebserviceswithxmlexample /

当我们在Web.xml中使用DispatcherServlet时,此请求进入Spring DisplatcherServlet,它没有在控制器中找到相应的映射,因此我们可以获得该警告。

9)测试休息服务下:"http://localhost:8080/springrestfulwebserviceswithxmlexample /国家"。

10)现在将国家/地区ID作为URL的参数。

"http://localhost:8080/springrestfulwebserviceswithxmlexample/country/2"。