API接口的请求和响应小知识(后端)

(一个项目的知识回顾)

一.请求

1. Get请求时:前端请求数据以key/value的形式,SpringMVC采用基本数据类型(String、Integer等等)接收数据。

1.1. 用restful风格@PathVariable:

        传输数据放在url路径中,controller中的方法参数需要用@PathVariable注解,注解后加(“别名”)可对变量起别名,参数名称或别名必须和路径中的( /{参数}/ )名称一致,否则无法传输。@PathVariable是用来获得请求url中的动态参数。

        比如:


@GetMapping("/merchants/{id}")
public MerchantDTO queryMerchantById(@PathVariable("id") Long id)

@GetMapping(value = "/my/pay‐channel‐params/apps/{appId}/platform‐ channels/{platformChannel}/pay‐channels/{payChannel}")
public PayChannelParamDTO queryPayChannelParam(@PathVariable("appId")String appId,@PathVariable("platformChannel")String platformChannel,@PathVariable("payChannel") String payChannel)

1.2.用@RequestParam 注解:

       (1)可传输Map类型key-value格式:(@RequestParam Map map),在url中的?后面添加参数即可使用。(key=value形式,用&可拼接多个)

        (2)可传输string字符串格式:(@RequestParam String waterEleId,@RequestParam String enterpriseName),在url中的?后面添加参数即可使用。(key=value形式,用&可拼接多个)

        (3)GET请求中不可用自定义实体类传输:(@RequestParam Object object),不能用。

1.3.使用HttpServletRequest

         此方法是获取整个URL的信息,然后手动获取、分离参数,和类型转化。这个里面带的内容很多,不仅Param还有Header,Cookies等。

2.Post请求时:前端请求Form表单数据(application/x-www-form-urlencoded)和Json数据(Content-Type=application/json)、多部件类型数据(multipart/form-data),SpringMVC采用基本类型及自定义对象接收,对于Json数据SpringMVC使用@RequestBody注解解析请求的json数据。比如:

@PostMapping("/merchants/register")
public MerchantRegisterVO registerMerchant(@RequestBody MerchantRegisterVO merchantRegisterVO)

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile   multipartFile) throws   IOException

@PostMapping("/createAliPayOrder")
public void createAlipayOrderForStore(OrderConfirmVO orderConfirmVO, HttpServletRequest request, HttpServletResponse response) throws BusinessException, IOException

2.1.使用@Requestbody

(1)(@RequestBody Map map)、(@RequestBody Object object)在application/json时候可用,

在form-data、x-www-form-urlencoded时候不可用。

(2)使用@RequestBody可以接收json字符串, Map,JSONObject,或者对应的JavaBean。

2.2.使用@RequestParam

(1)这种方式只在Content-Type=application/x-www-form-urlencoded情况下才能使用,sevlet将Body中的key-value转成Param。

(2)如果Content-Type=mutipart/form-data,Body中加入参数和URL后面拼接参数一起做Post请求,都可以被加载到Param中,如果是同名的,只取用form-data中的。
  如果Content-Type=application/x-www-form-urlencoded和URL拼接的一起,如果是String类型,则两个值会被拼接,其他类型取的是URL拼接的参数。

2.3.通用HttpServletRequest
  和Get方式一样,这是个通用方式。也可以和URL拼接的一起搭配,但是没有RequestParam的String类型值被拼接问题,优先级 form-data高于URL拼接、高于x-www-form-urlencoded。

二.响应

1.@RestController

        使用@RestController注解Controller时,Controller中的方法无法返回jsp页面、或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。@RestController部分源码如下:

@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 (or empty String otherwise)
	 * @since 4.0.1
	 */
	@AliasFor(annotation = Controller.class)
	String value() default "";

}

2.@Controller、@ResponseBody

        使用@Controller 注解,@Controller可配合视图解析器解析return 的jsp、html页面,并且跳转到相应解析页面。若返回json、XML或自定义mediaType等内容到页面,需要在对应的方法上加@ResponseBody注解。

参考链接:

@RequestBody和@RequestParam的请求方式get和post关系_qfikh的博客-CSDN博客_@requestparam post

POST、GET、@RequestBody和@RequestParam区别_Hello World-CSDN博客_@requestparam

 @RequestParam @RequestBody @PathVariable 等参数绑定注解详解_行者无疆-CSDN博客

@RequestParam,@PathParam,@PathVariable等注解区别_一年e度的夏天的专栏-CSDN博客_@pathvariable

@Controller和@RestController的区别? - shuaiflying - 博客园

你可能感兴趣的:(java,开发语言,后端)