SpringMVC REST ful API

      REST API 作为异构系统集成的终极解决方案,导致各个框架都实现了对REST API 的支持。SpringMVC在业内名声不小,自然少不了对REST API的支持。今天研究了一下SpringMVC的REST API,虽然简单但也能够作为一个入门级别的教程了。

      1.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">
  <display-name></display-name>	
  
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>  
        <servlet-name>springmvc</servlet-name>  
        <servlet-class>  
            org.springframework.web.servlet.DispatcherServlet  
        </servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>springmvc</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>  
</web-app>
    2.springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
        xmlns:context="http://www.springframework.org/schema/context"  
        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" default-autowire="byName">  
        <context:component-scan base-package="com.wicresoft.controller" />  
        <bean id="viewResolver"  
            class="org.springframework.web.servlet.view.UrlBasedViewResolver">  
            <property name="viewClass"  
                value="org.springframework.web.servlet.view.JstlView" />  
            <property name="prefix" value="/" />  
            <property name="suffix" value=".jsp" />  
        </bean>
        
        <!-- rest str -->
        <!-- 自动搜索@Controller标注的类,包括其下面的子包 -->
	<context:component-scan base-package="com.wicresoft.controller" />

	<!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json /blog/1.xml -->
	<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<!-- 设置为true以忽略对Accept Header的支持 -->
		<property name="ignoreAcceptHeader" value="true" />
		
		<!-- 在没有扩展名时即: "/blog/1" 时的默认展现形式 -->
		<property name="defaultContentType" value="text/html" />

		<!-- 扩展名至mimeType的映射,即 /blog.json => application/json -->
		<property name="mediaTypes">
			<map>
				<entry key="html" value="text/html" />
				<entry key="pdf" value="application/pdf" />
				<entry key="xsl" value="application/vnd.ms-excel" />
				<entry key="xml" value="application/xml" />
				<entry key="json" value="application/json" />
			</map>
		</property>
	
		<!-- 用于开启 /blog/123?format=json 的支持 -->
		<property name="favorParameter" value="false" />
		<property name="viewResolvers">
			<list>
				<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
				<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
					<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
					<property name="prefix" value="/pages" />
					<property name="suffix" value=".jsp"></property>
				</bean>
			</list>
		</property>
		<property name="defaultViews">
			<list>
				<!-- for application/json -->
				<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
				<!-- for application/xml -->
			</list>
		</property>
	</bean>
        <!-- rest end-->
</beans>  
3.控制器

//FINAL 
package com.wicresoft.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.wicresoft.model.TournamentContent;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Controller
public class JsonController {
    @RequestMapping("/json")
    public void getJSON(Model model) {
        List<TournamentContent> tournamentList = new ArrayList<TournamentContent>();
        tournamentList.add(TournamentContent.generateContent("FIFA", new Date(), "World Cup", "www.fifa.com/worldcup/"));
        tournamentList.add(TournamentContent.generateContent("FIFA", new Date(), "U-20 World Cup", "www.fifa.com/u20worldcup/"));
        tournamentList.add(TournamentContent.generateContent("FIFA", new Date(), "U-17 World Cup", "www.fifa.com/u17worldcup/"));
        tournamentList.add(TournamentContent.generateContent("FIFA", new Date(), "Confederations Cup", "www.fifa.com/confederationscup/"));
        model.addAttribute("items", tournamentList);
        model.addAttribute("status", 0);
        //return "jsontournamenttemplate";
    }
}
4.实体类

package com.wicresoft.model;

import java.util.Date;

public class TournamentContent {
    private static int idCounter = 0;
    private String author;
    private Date publicationDate;
    private String name;
    private String link;
    private int id;

    public static TournamentContent generateContent(String author, Date date, String name, String link) {
        TournamentContent content = new TournamentContent();
        content.author = author;
        content.publicationDate = date;
        content.name = name;
        content.link = link;
        content.id = idCounter++;

        return content;
    }

    public String getAuthor() {
        return author;
    }

    public Date getPublicationDate() {
        return publicationDate;
    }

    public String getName() {
        return name;
    }

    public String getLink() {
        return link;
    }

    public int getId() {
        return id;
    }
}
运行效果:
http://localhost:8080/MyCLM/json.json

{"status":0,"items":[{"name":"World Cup","id":0,"link":"www.fifa.com/worldcup/","author":"FIFA","publicationDate":1432882544472},{"name":"U-20 World Cup","id":1,"link":"www.fifa.com/u20worldcup/","author":"FIFA","publicationDate":1432882544479},{"name":"U-17 World Cup","id":2,"link":"www.fifa.com/u17worldcup/","author":"FIFA","publicationDate":1432882544479},{"name":"Confederations Cup","id":3,"link":"www.fifa.com/confederationscup/","author":"FIFA","publicationDate":1432882544479}]}
总结:

1.本项目依赖SpringMVC的jar包

2.核心在于配置里面,弄清楚配置就能够理解原理。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值