当前位置:首页 > 科技  > 软件

不知道这些不要说玩转了Controller接口

来源: 责编: 时间:2024-05-08 09:18:21 260观看
导读环境:SpringBoot3.2.51. 简介在Spring Boot中,Controller接口是用于处理HTTP请求并返回响应的重要组件。对于Controller中映射的接口,Spring提供了多种匹配方式,以便开发者能够更灵活、更精确地定义请求与处理器方法之间

环境:SpringBoot3.2.56rq28资讯网——每日最新资讯28at.com

1. 简介

在Spring Boot中,Controller接口是用于处理HTTP请求并返回响应的重要组件。对于Controller中映射的接口,Spring提供了多种匹配方式,以便开发者能够更灵活、更精确地定义请求与处理器方法之间的对应关系。6rq28资讯网——每日最新资讯28at.com

在平时的开发中,定义的接口路径通常会遵循RESTful API设计原则,并且会尽量保持清晰、简洁和具有描述性。接口路径可能会根据业务需求和资源模型进行组织,但一般都具有以下特点:6rq28资讯网——每日最新资讯28at.com

  1. 使用名词表示资源,如/users、/products。
  2. 使用HTTP方法(GET、POST、PUT、DELETE等)来表示对资源的操作。
  3. 对于资源的子集或特定实例,使用路径参数,如/users/{userId}。
  4. 在需要时,使用查询参数来过滤或排序结果,如/users?name=John&sort=asc。

这样的接口路径设计有助于保持API的一致性和可读性,同时也方便前端开发者理解和使用。并且这种RESTful API接口返回值通常都是JSON格式,虽然JSON格式因其轻量级和易读性而广泛流行,但实际项目开发中确实可能出现对返回值格式的不同需求。这些需求可能包括返回JSON、XML,或者根据特定的业务场景需要自定义的数据格式。针对这种场景需求SpringMVC为我们提供默认提供了支持,如:JSON,XML,自定义格式,接下来将详细介绍如何一个接口支持不同的返回数据格式。6rq28资讯网——每日最新资讯28at.com

2. 实战案例

你需要一个接口支持不同格式的输出,我们可以通过以下3中方式来定义不同的输出格式。为了支持XML格式,我们需要引入下面依赖6rq28资讯网——每日最新资讯28at.com

<dependency>  <groupId>com.fasterxml.jackson.dataformat</groupId>  <artifactId>jackson-dataformat-xml</artifactId></dependency>

2.1 请求Header

这种方式是官方推荐的方式,根据请求的Accept header来指定你希望接收的数据格式6rq28资讯网——每日最新资讯28at.com

@RestController@RequestMapping("/returnformat")public class RetrunFormatController {    @GetMapping("")  public User format() {    User user = new User(666L, "张三") ;    return user ;   }}

通过postman指定请求的header Accept6rq28资讯网——每日最新资讯28at.com

图片图片6rq28资讯网——每日最新资讯28at.com

指定返回XML格式6rq28资讯网——每日最新资讯28at.com

图片图片6rq28资讯网——每日最新资讯28at.com

2.2 通过请求参数

要想SpringMVC支持请求参数方式设置接收的数据格式,首先需要开启此功能6rq28资讯网——每日最新资讯28at.com

spring:  mvc:    contentnegotiation:      favor-parameter: true

通过上面开启后我们就可以在请求参数中添加format参数即可,默认只支持json和xml两种格式:6rq28资讯网——每日最新资讯28at.com

图片图片6rq28资讯网——每日最新资讯28at.com

指定返回XML格式6rq28资讯网——每日最新资讯28at.com

图片图片6rq28资讯网——每日最新资讯28at.com

请求的参数名默认是format,我们还可以通过如下配置修改参数名6rq28资讯网——每日最新资讯28at.com

spring:  mvc:    contentnegotiation:      favor-parameter: true      parameter-name: fmt

图片图片6rq28资讯网——每日最新资讯28at.com

2.3 通过路径后缀

该种方式已经不推荐使用了。从5.3开始,默认情况下,SpringMVC不再执行.*后缀模式匹配,其中映射到/person的控制器也隐式映射到/perse.*。因此,路径扩展不再用于解释响应的请求内容类型 — 例如/person.pdf、/person.xml等。要使用基于后缀的方式,在不同的版本中开启此功能的方式不一样,在5.3(包括)之前版本可以直接通过配置设置,从6.0开始只能通过自定义WebMvcConfigurer配置。6rq28资讯网——每日最新资讯28at.com

5.3之前版本6rq28资讯网——每日最新资讯28at.com

spring:  mvc:    contentnegotiation:      favor-path-extension: true

6.0版本6rq28资讯网——每日最新资讯28at.com

@Configurationpublic class FavorPathConfigurer implements WebMvcConfigurer {  @Override  public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {    configurer.favorPathExtension(true) ;  }}

Controller接口定义6rq28资讯网——每日最新资讯28at.com

@RestController@RequestMapping("/favors")public class FavorPathController {    @GetMapping("/p.*")  public User favor() {    return new User(1L, "张三") ;  }}

分别指定不同的请求后缀6rq28资讯网——每日最新资讯28at.com

图片图片6rq28资讯网——每日最新资讯28at.com

图片图片6rq28资讯网——每日最新资讯28at.com

2.4 自定义格式

在Spring Boot环境下自定义消息格式非常的简单,你执行实现HttpMessageConverter接口即可。如下示例,自定义返回yaml格式的数据6rq28资讯网——每日最新资讯28at.com

public class YamlHttpMessageConverter implements HttpMessageConverter<Object> {  @Override  public boolean canWrite(Class<?> clazz, MediaType mediaType) {    // 这里为了简单只做类型判断,你应该对MediaType做判断,否则其它格式将无法正确输出    return User.class.isAssignableFrom(clazz)  }  @Override  public List<MediaType> getSupportedMediaTypes() {    return List.of(new MediaType("application", "yaml")) ;  }  @Override  public void write(Object t, MediaType contentType, HttpOutputMessage outputMessage)      throws IOException, HttpMessageNotWritableException {    StreamUtils.copy(new org.yaml.snakeyaml.Yaml().dump(t), StandardCharsets.UTF_8, outputMessage.getBody()) ;  }}

配置文件中定义你自定义的格式6rq28资讯网——每日最新资讯28at.com

spring:  mvc:    contentnegotiation:      media-types:        yaml: application/yaml

以上就完成了自定义格式输出的所有准备,测试结果6rq28资讯网——每日最新资讯28at.com

图片图片6rq28资讯网——每日最新资讯28at.com

输出yaml格式数据。你可以将输出的数据在通过Yaml类进行还原为User对象。6rq28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-87255-0.html不知道这些不要说玩转了Controller接口

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: JavaScript 原生深拷贝方法来啦!structuredClone 闪耀登场~

下一篇: HTMX:重回前端的原始时代?

标签:
  • 热门焦点
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
  • AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    光影交错的镜像世界,虚实幻化的视觉奇观,虚拟偶像与真人共同主持,这些场景都出现在2019世界人工智能大会的舞台上。8月29日至31日,“AI艺术欣赏体验会”在上海
Top