spring-mvc restful web services

spring可以轻松的集成多种restful风格的web-service,但其实spring-mvc中已经提供了这一支持。

可以根据需要生成xml、json、text等格式。

生成xml依赖于JAXB,主要是@XmlRootElement、@XmlAttribute、@XmlElement等注解的使用,JDK1.6开始就有jaxb了,也可以单独加jaxb-api依赖。

生成json就需要jackson,依赖jackson-mapper-asl-xxx.jar、jackson-core-asl-xxx.jar。maven依赖如下,jackson-core-asl会自动加入。

<!-- jackson -->
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.7.9</version>
</dependency>

下面是一个简单的controller。@RequestMapping注解中的produces指定输出的格式,xml、json等

package com.spring.demo.web.controller;

import javax.annotation.PostConstruct;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import com.spring.demo.core.entity.Member;

/**
 * rest demo
 * 
 * @author sean
 * 
 */
@Controller
@RequestMapping("/rest")
public class RestController {
    
    private Logger logger = LoggerFactory.getLogger(getClass());
    private Member member;

    @PostConstruct
    public void postConstruct() {
        member = new Member();
        member.setEmail("[email protected]");
        member.setName("张三");
        member.setStreet("南山区白石洲天河街55号");
        member.setZip("518025");
    }
    
    /**
     * 输出xml
     * 
     * @return
     */
    @RequestMapping(value = "/xml", produces = { MediaType.APPLICATION_XML_VALUE })
    @ResponseBody
    public Member xml() {
        logger.debug("rest xml");
        return member;
    }
    
    /**
     * 输出json
     * 
     * @return
     */
    @RequestMapping(value = "/json", produces = { MediaType.APPLICATION_JSON_VALUE })
    @ResponseBody
    public Member json() {
        logger.debug("rest json");
        return member;
    }
    
    /**
     * 更新操作,只需要返回成功与否的状态。
     * 
     * @return
     */
    @RequestMapping(value="/updateAndReturnOk")
    @ResponseBody
    public String updateAndReturnOk() {
        logger.debug("rest updateAndReturnOk");
        
        return "Ok";
    }
    
    /**
     * 更新操作,什么都不返回。
     */
    @RequestMapping(value="/update")
    @ResponseStatus(value=HttpStatus.NO_CONTENT)
    @ResponseBody
    public void update() {
        logger.debug("rest update and return no content");
    }
}


源码参考RestController、Member


你可能感兴趣的:(spring-mvc restful web services)