一个基本的RESTfule service最进场向外提供的请求Method就是Get和Post。

在Get中,常用的都会在请求上带上参数,或者是路径参数。响应Json。

在Post中,常用的会提交form data或者json data作为参数,响应Json。

1. Get请求,url传参,返回json。

先准备一个请求后,响应的对象。

package com.example.demo;

public class Echo {
private final long id;
private final String content; public Echo(long id, String content) {
this.id = id;
this.content = content;
} public long getId() {
return this.id;
} public String getContent() {
return this.content;
}
}

准备一个用来接收请求的EchoController(名字可以根据实际情况写),为它增加@RestController注解,表示这是一个处理RESTful请求的响处理类。

增加@RequestMapping,为本Controller提供一个根url,当然可以不写,写这个是为了更好的将同一种处理的url归在一类,本Controller其他的处理方法对应的url中就不需要重复写。

package com.example.demo;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ModelAttribute; @RestController
@RequestMapping("/echo")
public class EchoController {
private static final String echoTemplate1 = "received %s!";
private static final String echoTemplate2 = "%s speak to %s \'%s\'";
private final AtomicLong counter = new AtomicLong(); @RequestMapping(value="/getter/pattern1", method=RequestMethod.GET)
public Echo getterPattern1(String content) {
return new Echo(counter.incrementAndGet(), String.format(echoTemplate1, content));
} @RequestMapping(value="/getter/pattern2", method=RequestMethod.GET)
public Echo getterPattern2(@RequestParam(value="content", required=false) String alias) {
return new Echo(counter.incrementAndGet(), String.format(echoTemplate1, alias));
}
}

getterPattern1的上面增加了@RequestMapping注解,将指定的url和处理的方法进行映射,对应这个url的请求就由该方法来处理,method可以省略,省略后就是对应所有的Http Metho,gtterPatten1方法的参数默认就和url中的content参数进行映射。

再看getterPattern2,跟上面的方法效果一致,他们的区别就在于参数定义用了@RequestParam注解将url参数和方法参数进行了映射说明,@RequesteParam中value的值就是url中实际的参数,required说明该参数是否必须,如果是true,而实际上url中并没有带上该参数,那么会报异常,为防止异常可以增加defaultValue指定参数的默认值即可。我们会发现这里的方法参数是alias,这里当然是可以和url的参数名不同,只要RequestParam注解映射了他们的关系就没问题。

运行后,可以在浏览器中访问对应的url来看看结果,我这里是用curl来访问。

curl http://localhost:8080/echo/getter/pattern1?content=hello
curl http://localhost:8080/echo/getter/pattern2?content=hello

上面两个url的访问得到的结果除了id会自增外,其他是一致的:

{"id":6,"content":"received hello!"}

 2. Get请求,传递url路径参数,返回json。

在EchoController中增加一个响应方法。

    @RequestMapping(value="/getter/pattern3/{content}", method=RequestMethod.GET)
public Echo getterPattern3(@PathVariable String content) {
return new Echo(counter.incrementAndGet(), String.format(echoTemplate1, content));
}

可以看到,在@RequestMapping的url定义中的末尾有“{content}”,表明这里是一个路径参数,在getterPattern3的参数content增加了@PathVariable注解,将方法参数与路径参数进行了映射。

运行后,访问url。

curl http://localhost:8080/echo/getter/pattern3/123456

结果:

{"id":8,"content":"received 123456!"}

3.Post请求,参数以Http body的途径提交Json数据。

先定义一个提交的Json对应的对象,这里把它定义为Message。

package com.example.demo;

public class Message {
private String from;
private String to;
private String content; public Message() {} public String getFrom() {
return this.from;
} public String getTo() {
return this.to;
} public String getContent() {
return this.content;
} public void setFrom(String value) {
this.from = value;
} public void setTo(String value) {
this.to = value;
} public void setContent(String value) {
this.content = value;
}
}

在EchoController增加响应的方法,并完成映射。

    @RequestMapping(value="/setter/message1", method=RequestMethod.POST)
public Echo setterMessage1(@RequestBody Message message) {
return new Echo(counter.incrementAndGet(), String.format(echoTemplate2, message.getFrom(), message.getTo(), message.getContent()));
}

在setterMessage1方法的参数中用@RequestBody将请求的Http Body和参数messge进行了映射。

运行后,使用curl向服务端提交json数据。提交的请求头部要带上"Content-Type:application/json",表明请求体Json。

curl -i -H "Content-Type:application/json" -d "{\"from\":\"Tom\",\"to\":\"Sandy\",\"content\":\"hello buddy\"}" http://localhost:8080/echo/setter/message1

结果:

{"id":9,"content":"Tom speak to Sandy 'hello buddy'"}

 4.Post请求,参数以Http body的途径提交表单数据。

在EchoController增加响应的方法,并完成映射。

    @RequestMapping(value="/setter/message2", method=RequestMethod.POST)
public Echo setterMessage2(@ModelAttribute Message message) {
return new Echo(counter.incrementAndGet(), String.format(echoTemplate2, message.getFrom(), message.getTo(), message.getContent()));
}

在setterMessage2方法的参数中用@ModelAttribute将请求的Http Body中的表单数据和参数messge进行了映射。

运行后,使用curl向服务端提交表单数据。提交的请求头部要带上"Content-Type:application/x-www-form-urlencoded",表明请求体是表单数据,格式是"key1=value1&key2=value2&key3=value3"。

curl -i -H "Content-Type:application/x-www-form-urlencoded" -d "from=sandy&to=aissen&content=go to" http://localhost:8080/echo/setter/message2

结果:

{"id":11,"content":"sandy speak to aissen 'go to'"}

End

SpringBoot构建RESTful service完成Get和Post的更多相关文章

  1. SpringBoot 构建RestFul API 含单元测试

    相关博文: 从消费者角度评估RestFul的意义 SpringBoot 构建RestFul API 含单元测试 首先,回顾并详细说明一下在快速入门中使用的  @Controller .  @RestC ...

  2. 【快学springboot】2.Restful简介,SpringBoot构建Restful接口

    Restful简介 Restful一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现 ...

  3. 使用spring boot+mybatis+mysql 构建RESTful Service

    开发目标 开发两个RESTful Service Method Url Description GET /article/findAll POST /article/insert 主要使用到的技术 j ...

  4. [SpringBoot guides系列翻译]SpringBoot构建RESTful程序入门

    原文地址 构建一个RESTful的WebService 这个指南将带你用Spring创建一个RESTful的helloworld程序. 你将完成 在下面地址上创建一个接收http get请求的服务 h ...

  5. SpringBoot构建RESTful API

    1.RESTful介绍 RESTful是一种软件架构风格! RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对 ...

  6. 使用 SpringBoot 构建一个RESTful API

    目录 背景 创建 SpringBoot 项目/模块 SpringBoot pom.xml api pom.xml 创建 RESTful API 应用 @SpringBootApplication @C ...

  7. Springboot & Mybatis 构建restful 服务五

    Springboot & Mybatis 构建restful 服务五 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务四 2 restful ...

  8. Springboot & Mybatis 构建restful 服务四

    Springboot & Mybatis 构建restful 服务四 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务三 2 restful ...

  9. Springboot & Mybatis 构建restful 服务三

    Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful ...

随机推荐

  1. JavaScript学习笔记(散)——继承、构造函数super

    构造函数中的super 今天看<JavaScript设计模式与开发实践>时,在书中看到一段代码出现super语句,第一次看到这个关键字,所以上网查了下它的作用,发现这个关键字是来自java ...

  2. 在vs2010中显示代码的行数

    1.打开VS2010,然后"工具" → "选项" 2.在选项页面,点击"文本编辑器"→"所有语言",在显示里将[行号]选 ...

  3. Linux常见命令(三)

    今天我们来介绍第三个命令:pwd. Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来 ...

  4. h1b期间回国须知

    今天才搞明白几点 1. visa 和 status 是两个不同的东西,status能保证合法在美国.visa能保证合法进入美国 所以,h1b十月份的身份转换时status的转换,如果回国还需要重新办h ...

  5. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  6. [POJ2104/HDU2665]Kth Number-主席树-可持久化线段树

    Problem Kth Number Solution 裸的主席树,模板题.但是求k大的时候需要非常注意,很多容易写错的地方.卡了好久.写到最后还给我来个卡空间. 具体做法参见主席树论文<可持久 ...

  7. C# TryParse()用法

    形式(以decimal为例): decimal.TryParse(str1,out num1) 功能:将str1转化成decimal类型,若转化成功,将值赋给num1,并返回true; 若转化失败,返 ...

  8. 二维坐标点排序(JavaScript)

    今天给大家分享下最近web项目中出现的一个技术难点问题--坐标排序: 如下图所示,要求在前端页面上按顺序将下面5个模块的坐标依次保存至数据库 现在已知信息如下: 1.每个模块分别为一个div 2.每个 ...

  9. 新篇章之我的java学习之路下

    昨天写下了人生的第一篇博客,今天接着写我的java学习之路有关开发及框架的学习过程. 想要学好java语言,只学习一些java的基本语法对实际开发中的用处还是不大的,所以我们还要掌握一些有关javaW ...

  10. 关于abp中使用的sweetalert对话框组件的confirm确认对话框中的一个坑

    今天修改了一个功能,限制删除用户,在删除的时候不满足条件的时候提示用户原因,使用的sweet alert组件. abp框架前端集成了sweet alert 对http请求的error做了全局处理,我在 ...