SpringBoot构建RESTful service完成Get和Post

一个基本的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)); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/663a38a346955cfd85fcfc3f719c8df9.html