当前位置: 首页 > news >正文

网站投放广告怎么做网址如何被快速收录

网站投放广告怎么做,网址如何被快速收录,外贸展示网站多少钱,wordpress+调整+行距前言 RequestBody 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解 RequestBody 注解 使用案例 1.自定义实体类 Data NoArgsConstructor AllArgsConstructor public class User {priv…

前言

@RequestBody 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解 @RequestBody 注解

使用案例

1.自定义实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private String username;private String password;@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
@RestController
@RequestMapping("/request_body")
public class RequestBodyController {@PostMapping("/entity")public String entity(@RequestBody User user) {return user.toString();}}

 2.使用 Map 接收
@PostMapping("/map")
public String map(@RequestBody Map<String, User> map) {return map.toString();
}

3.自定义实体类 (复杂对象)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Complex {private String tag;private List<User> list;private User[] array;private Map<String, User> map;
}
@PostMapping("/complex")
public String complex(@RequestBody Complex complex) {return complex.toString();
}

请求参数
{"tag": "complex","list": [{"username": "anna","password": "123"},{"username": "bob","password": "456"}],"array": [{"username": "cindy","password": "135"},{"username": "david","password": "246"}],"map": {"u1": {"username": "eric","password": "159"},"u2": {"username": "frank","password": "357"}}
}
4.Content-Type 为 application/xml
添加 POM 文件
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.16.1</version>
</dependency>
接口方法 (和案例1只有方法名不一样)
@PostMapping("/xml")
public String xml(@RequestBody User user) {return user.toString();
}
请求头设置

将 Content-Type 设置为 application/xml (一般情况下 Content-Type 为 application/json

传递参数
<User><username>tom</username><password>123</password>
</User>
响应结果

源码解析

InvocableHandlerMethod#getMethodArgumentValues

参数的处理分为两个阶段:

  1. 判断当前环境中存在的resolvers,是否支持解析当前参数
  2. 处理参数
判断是否支持解析当前参数

我的环境中存在27个resolvers,通过命名我们大概可以猜测出 RequestResponseBodyMethodProcessor 是处理 @RequestBody 注解的 resolver

RequestResponseBodyMethodProcessor#supportsParameter

即如果参数上存在 @RequestBody 注解,则使用 RequestResponseBodyMethodProcessor 处理参数

RequestResponseBodyMethodProcessor#resolveArgument

RequestResponseBodyMethodProcessor 的 resolveArgument 方法会遍历当前环境中的 HttpMessageConverters,如果存在一个 HttpMessageConverter 的 canRead 方法返回 true,则使用该 HttpMessageConverter 的 read 方法读取数据。

案例1、2、3 的原理其实是一样的,request 的 Content-Type 为 application/json,spring-boot-starter-web 会引入 json 相关依赖,所以默认情况下,SpringMVC 有把 json 对象转换成 key-value 形式数据结构的能力

案例4 我们引用了相关依赖,使得 SpringMVC 有把 xml 对象转换成 key-value 形式数据结构的能力

小结

如果 request 的 Content-Type 为 xxx,并且存在一个 HttpMessageConverter 支持解析 Content-Type 为 xxx 的数据,通过 @RequestBody 注解,就可以将数据绑定到 key-value 形式的数据结构上 

扩展:自定义HttpMessageConverter,处理指定 Content-Type 的请求

创建HttpMessageConverter
public class UserTextPlainHttpMessageConverter implements HttpMessageConverter {@Overridepublic boolean canRead(Class clazz, MediaType mediaType) {return clazz == User.class && "text".equals(mediaType.getType()) && "plain".equals(mediaType.getSubtype());}@Overridepublic boolean canWrite(Class clazz, MediaType mediaType) {return false;}@Overridepublic List<MediaType> getSupportedMediaTypes() {return Collections.singletonList(MediaType.TEXT_PLAIN);}@Overridepublic Object read(Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {try (InputStream inputStream = inputMessage.getBody();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {String line;StringBuilder sb = new StringBuilder();while ((line = reader.readLine()) != null) {sb.append(line);}ObjectMapper objectMapper = new ObjectMapper();return objectMapper.readValue(sb.toString(), User.class);} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void write(Object o, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {}
}
创建配置类
@Configuration
public class MessageConfig implements WebMvcConfigurer {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new UserTextPlainHttpMessageConverter());}}
接口方法 (和案例1、4 只有方法名不一样)
@PostMapping("/convert")
public String convert(@RequestBody User user) {return user.toString();
}
Postman设置
 Content-Type 设置为 text/plain

body 传参类型为 text

接口响应

http://www.ho-use.cn/article/1769.html

相关文章:

  • 哪里有做独立网站的服务器同城发广告的平台有哪些
  • 学电脑培训班多少一个月seo博客是什么意思
  • 单页网站编辑器google关键词排名查询
  • 住房和城乡规划建设局官方网站营销策划方案怎么写?
  • 手机网站 分享按钮手机优化软件哪个好
  • 自己在电脑上建文档做网站怎么做新航道培训机构怎么样
  • 厦门效果图制作公司seo快排优化
  • wordpress 最近访客seo资讯网
  • 建立企业网站的缺点网店培训机构
  • 珠宝首饰网站源码百度广告
  • 物流网站建设方案百度小说搜索风云榜总榜
  • 成品网站建设价格写软文怎么接单子
  • 英文网站建设需求网站关键词优化外包
  • wordpress 收藏夹广州seo报价
  • 镇江网站建设工程品牌宣传推广策划方案
  • 电商品牌网站开发运营怎么建立自己的网站
  • 网站策划报告怎么写seo外链工具源码
  • 网站建设插件搜索引擎排名2022
  • 日本做设计的网站有哪些方面百度关键词怎么设置
  • 佛山市建网站做网站费用百度号码认证平台取消标记
  • 国外做外挂的网站百度升级最新版本
  • 毛片a做片在线观看网站有哪些西安快速排名优化
  • 建筑网站大全免费百度手机助手免费下载
  • 成都科技网站建设找哪家上海网络seo公司
  • 美甲网站模板品牌企业seo咨询
  • 如何进行主题网站的资源建设佛山网站建设模板
  • 平台类网站成都seo排名
  • 建设网站遇到的问题网络营销策划ppt
  • 道真县城乡建设局网站google登录入口
  • 九江网站建设网络营销的核心是什么