4. Spring MVC 4.1-REST

翻译 2015年11月19日 21:35:54

4.1 REST

  • REST:Representational State Transfer;
  • REST是一种数据导向web service,相对于SOAP是一种操作操作和处理导向的web service;
  • Spring为对REST的支持提供了@RestController;
    • 在没有@RestController可以通过@Controller,@ResponseBody组合实现REST控制器;
    • 但是我们经常会使用@ResponseBody这样很麻烦,且易忘记;
    • 使用@RestController替代@Controller,我们就不用使用@ResponseBody;
  • REST支持的http method(通过@RequestMapping的method属性控制)
    • POST:新增
    • GET:读取
    • PUT/PATCH:更新
    • DELETE:删除
  • produces的内容是指定返回的媒体类型让浏览器识别

    • 如返回text/plain的话,浏览器上的js回掉拿到的是字符串,需要自己转换对象;
    • 如返回application/json的话,浏览器上的js拿到的就是js对象而不是字符串,就不需要进行转换;
  • 本例演示向控制器提交json数据,返回结果分别为json和xml格式;

4.2 示例

4.2.1 @RestController源码

从@RestController看出,@RestController是一个元注解,组合了@Controller,@ResponseBody,相当于同时使用了@Controller @ResponseBody

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

    /**
     * The value may indicate a suggestion for a logical component name,
     * to be turned into a Spring bean in case of an autodetected component.
     * @return the suggested component name, if any
     * @since 4.0.1
     */
    String value() default "";
}

4.2.2 代码
  • 添加jackson依赖

jackson-dataformat-xml依赖jackson-bind,这样我们能同时返回xml和json

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.5.3</version>
</dependency>

若只需返回json数据(大多数项目都是这样),将上面依赖更换为

 <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
</dependency>
传值对象
package com.wisely.web;

public class DemoObj {
    private Long id;
    private String name;
    //此处一定要有空构造,不然会有400 bad request,主要是jackson将json参数转换为对象需要
    public DemoObj() {
        super();
    }
    public DemoObj(Long id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
.
DemoMVCConfig注册静态资源
    // 静态资源映射
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
    }
控制器
package com.wisely.web;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class RESTController {
    @RequestMapping(value = "/getjson",produces={"application/json;charset=UTF-8"})
    public DemoObj getjson(@RequestBody DemoObj obj){
        return new DemoObj(obj.getId()+1, obj.getName()+"yy");
    }
    @RequestMapping(value = "/getxml",produces={"application/xml;charset=UTF-8"})
    public DemoObj getxml(@RequestBody DemoObj obj){
        return new DemoObj(obj.getId()+1, obj.getName()+"yy");
    }
}
页面代码
<script type="text/javascript" src="<c:url value="/js/jquery.js" />"></script>
<script type="text/javascript">
var json = {"id":456,"name":"phy"};

$.ajax({
      url: "api/getjson",
      data: JSON.stringify(json),
      type:"POST",
      contentType:"application/json",
      success: function(data){
          console.log(data);
      }
    });
$.ajax({
      url: "api/getxml",
      data: JSON.stringify(json),
      type:"POST",
      contentType:"application/json",
      success: function(data){
          console.log(data);
      }
    });
</script>

结果

Spring mvc 原理浅析

Spring MVC主要包括以下要点: 1:由DispatcherServlet控制的整个流程; 2:注解驱动的控制器,其中包括请求映射、数据的绑定和格式化; 3:文件上传; ...
  • runrabbit
  • runrabbit
  • 2016年08月17日 10:57
  • 1136

Spring mvc 原理浅析

Spring MVC主要包括以下要点: 1:由DispatcherServlet控制的整个流程; 2:注解驱动的控制器,其中包括请求映射、数据的绑定和格式化; 3:文件上传; 4:一些杂项,如静态资源...
  • z69183787
  • z69183787
  • 2014年12月01日 21:49
  • 20916

springMVC从接受请求到完成响应的过程

sprinmvc大致的工作原理如下: **简要说明:** 1.用户发起请求到前端控制器。 2.前端控制器通过处理器映射器查找hander。 3.处理器映射器返回执行链。 a)hander对象 b)拦...
  • uhgagnu
  • uhgagnu
  • 2017年03月01日 22:13
  • 2292

Spring Boot / Spring MVC 入门实践 (一) :环境搭建与第一个项目

本系列文章系本人原创,欢迎转载,转载请注明出处。 本系列文章通过具体的例子,介绍如何通过Spring Boot来帮助简化Spring MVC开发Web Application的过程,旨在通过具体的实...
  • import_java_any
  • import_java_any
  • 2016年07月02日 00:45
  • 24201

Spring-MVC第二弹数据库链接

spring-mvc框架搭建:数据库链接,mybatis和mysql
  • huyuchaoheaven
  • huyuchaoheaven
  • 2016年10月08日 18:02
  • 2290

Spring MVC:原理与使用

本人上一篇博文提到了Spring的注入功能,这样在存在对象依赖(具体意思可见上一篇博文)的时候就不用自己生成一个对象了,特别是对于较多的无状态对象的时候,这个特别方便,加上Spring提供的用xml配...
  • u011579138
  • u011579138
  • 2016年05月15日 23:36
  • 7444

从零到一 新手教程 - JAVA Spring MVC

简单明了的Spring MVC 基础教学.  该简单工程的功能流程 : 1. 打开一个 jsp 页面输入必要的信息     2.  将输入的信息存储到 obejct 中    3. 将存储在 obje...
  • YtdxYHZ
  • YtdxYHZ
  • 2016年06月07日 04:12
  • 3498

spring mvc 原理及应用

一,前言 近年来,Struts因为其各种优异的属性,成为风靡全球的时兴技术,而这里要讨论的不是Struts,而是同样提供web 前端解决方案的框架:springMVC; springMVC作为spri...
  • Baple
  • Baple
  • 2013年09月21日 20:33
  • 20107

SpringMVC中的/*和/的区别

xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance...
  • u013692310
  • u013692310
  • 2016年12月15日 21:21
  • 2595

SpringMVC处理请求的流程

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模...
  • mishifangxiangdefeng
  • mishifangxiangdefeng
  • 2016年10月09日 09:38
  • 3309
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4. Spring MVC 4.1-REST
举报原因:
原因补充:

(最多只允许输入30个字)