转发:https://www.iteye.com/blog/wiselyman-2214290

3.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格式;

3.2 示例

3.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 ""; }

3.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>
  • 结果

03点睛Spring MVC 4.1-REST的更多相关文章

  1. 02点睛Spring MVC 4.1-@RequestMapping

    转发地址:https://www.iteye.com/blog/wiselyman-2213907 2.1 @RequestMapping @RequestMapping是SpringMVC的核心注解 ...

  2. 01点睛Spring MVC 4.1-搭建环境

    转发:https://www.iteye.com/blog/wiselyman-2213906 1.1 简单示例 通篇使用java config @Controller声明bean是一个控制器 @Re ...

  3. 06点睛Spring MVC 4.1-文件上传

    6.1 文件上传 在控制器参数使用@RequestParam("file") MultipartFile file接受单个文件上传; 在控制器参数使用@RequestParam(& ...

  4. 05点睛Spring MVC 4.1-服务器端推送

    转发:https://www.iteye.com/blog/wiselyman-2214626 5.1 服务器端推送 SSE(server send event)是一种服务器端向浏览器推送消息的技术, ...

  5. 04点睛Spring MVC 4.1-拦截器

    转发地址:https://www.iteye.com/blog/wiselyman-2214292 4.1 拦截器 拦截器实现了对每一个请求处理之前和之后进行相关的处理,类似于Servlet的filt ...

  6. 08点睛Spring MVC4.1-Spring MVC的配置(含自定义HttpMessageConverter)

    8.1 配置 Spring MVC的配置是通过继承WebMvcConfigurerAdapter类并重载其方法实现的; 前几个教程已做了得配置包括 01点睛Spring MVC 4.1-搭建环境 配置 ...

  7. 07点睛Spring MVC4.1-ContentNegotiatingViewResolver

    转发地址:https://www.iteye.com/blog/wiselyman-2214965 7.1 ContentNegotiatingViewResolver ContentNegotiat ...

  8. Spring MVC学习总结(2)——Spring MVC常用注解说明

        使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02     之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使 ...

  9. 09点睛Spring MVC4.1-异步请求处理(包含兼容浏览器的服务器端推送)

    转发地址:https://www.iteye.com/blog/wiselyman-2215852 9.1 异步请求处理 Servlet 3开始支持异步请求处理 Spring MVC 3.2开始支持S ...

随机推荐

  1. YAML_15 include and roles

    在编写playbook的时候随着项目越来越大,playbook越来越复杂.可以把一些play.task 或 handler放到其他文件中,通过包含进来是一个不错的选择. roles像是加强版的incl ...

  2. (尚002)Vue的基本使用

    输入端在上面变化的同时,下面的内容也在变 View-->DOM监听-->指令;大括号数据 {{username}} Model-->模型(简单来说就是data,数据供view自动去读 ...

  3. qt截图grapWindow,操作系统剪切版QClipBoard实现进程间通信

    QPixmap::grapWindow(winID) 存放一个图片QDesktopWidget 获得当前程序所在窗口id pid每个窗口有winID() // 3pixmap scaled 比例缩放 ...

  4. C# Dictionary使用

    Dictionary<string, int> illegParking = new Dictionary<string, int>(); 键:inData.LOTID 值:i ...

  5. cf 911F 树的直径+贪心

    $des$ 给定一棵 n 个节点的树,你可以进行 n ? 1 次操作,每次操作步骤如下:选择 u,v 两个度数为 1 的节点.将 u,v 之间的距离加到 ans 上.将 u 从树上删除.求一个操作序列 ...

  6. python写一个随机点名软件

    最近有个随机点名软件的需求,故写了一个,上代码:github地址 # -*- coding: utf-8 -*- # @Time : 18-12-31 下午4:21 # @Author : Felix ...

  7. (31)Vue安装

    在使用Vue的时候,推荐安装Vue Devtools https://github.com/vuejs/vue-devtools#vue-devtools Browser devtools exten ...

  8. Pytest权威教程21-API参考-05-对象(Objects)

    目录 对象(Objects) CallInfo Class Collector Config ExceptionInfo FixtureDef FSCollector Function Item Ma ...

  9. php md5算法

    <!DOCTYPE html> <html> <body> <?php $str = "Shanghai"; echo md5($str) ...

  10. 开源GIT仓库-----gogs

    简介:Gogs 是一款极易搭建的自助 Git 服务,其目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语 ...