SpringBoot构建Restful service完成Get和Post请求

网友投稿 399 2023-04-18


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指定参数的默认值即可。我们会发现这里的方法参数http://是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'"}

总结

以上所述是给大家介绍的SpringBoot构建Restful service完成Get和Post请求,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java连接postgresql数据库的示例代码
下一篇:微信小程序滚动Tab实现左右可滑动切换
相关文章

 发表评论

暂时没有评论,来抢沙发吧~