springmvc-restful

1.restful概述

REST 仅仅是一种架构的风格,并不是真正的架构,也不是一个软件,而是一种思想。

我们可以基于现有的HTTP、URI、XML、等现有技术来实现REST的风格。而不用去学习任何新的技术。

而学习REST的关键,不是任何的API或者实现方式,而是这种思想。

 简单案列测试:

package cn.controller;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import cn.pojo.User;

@Controller
@RequestMapping("users")
public class UserController {

    /**
     * restful根据ID查询用户
     * @param id
     * @return
     */
    @RequestMapping(value="{id}" ,method=RequestMethod.GET)
    public ResponseEntity<User> findUserById(@PathVariable("id") Long id) {
        
        User user;
        try {
            user = new User();
            if (user == null) {
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
            }
            return ResponseEntity.status(HttpStatus.OK).body(user);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
    }
    
    /**
     * restful 新增用户  
     * @param user
     * @return
     */
    @RequestMapping(method=RequestMethod.POST)
    public ResponseEntity<Void> addUser(User user){
        
//        输出有乱码 
        try {
            System.out.println("新增");
            System.out.println(user);
            return ResponseEntity.status(HttpStatus.CREATED).build();
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
    }
    
    /**
     * 更新用户
     * @param user
     * @return
     */
    @RequestMapping(method=RequestMethod.PUT)
    public ResponseEntity<Void> updateUser(User user){
        
        /*
         * 更新用户时,请求发送成功,但是携带的参数不能接收到 ,因此需要配置过滤器解决PUT方式的请求
         *     <!-- 解决PUT请求的参数为null问题 -->
            <filter>
                <filter-name>HttpMethodFilter</filter-name>
                <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
            </filter>
            <filter-mapping>
                <filter-name>HttpMethodFilter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>
         * */
        
        try {
            System.out.println("更新用户");
            System.out.println(user);
            return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
    }
    
    
    /**
     * 删除用户
     * @param id
     * @return
     */
    @RequestMapping(method=RequestMethod.DELETE)
    public ResponseEntity<Void> deleteUser(Long id){
        
        /*
         * 对于delete方式比较特殊  配置过滤器,运用POST方式,携带参数_method:DELETE
         * 在web.xml配置
         * <!-- 通过POST请求传递参数,再 用_method指定要转化的请求方式(DELETE或PUT),最后转为DELETE或PUT请求 -->
                <filter>
                    <filter-name>HiddenHttpMethodFilter</filter-name>
                    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
                </filter>
                <filter-mapping>
                    <filter-name>HiddenHttpMethodFilter</filter-name>
                    <url-pattern>/*</url-pattern>
                </filter-mapping>
         * */
        try {
            System.out.println("删除用户");
            System.out.println("id=" + id);
            return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
    } 
    
}
原文地址:https://www.cnblogs.com/lichangyun/p/8536565.html