springboot内容协商应用

内容协商:根据客户端接收能力不同,返回不同媒体类型的数据。
例如给定以下类返回该类的数据:

public class person {

    private String name;
    private String adress;

    @Override
    public String toString() {
        return "person{" +
                "name='" + name + '\'' +
                ", adress='" + adress + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAdress() {
        return adress;
    }

    public void setAdress(String adress) {
        this.adress = adress;
    }
}

pom文件中依赖jar:
```xml
   <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>

当我们自己定义参数类型时候
定义自己的mvc配置类:

@Configuration
public class Myconfig{
    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {
            //自定义内容convert
            @Override
            public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
                converters.add(new MyDefineConveter());
            }
        };
        return webMvcConfigurer;
    }
}

定义自己的converter:

public class MyDefineConveter implements HttpMessageConverter<person> {

    @Override
    public boolean canRead(Class clazz, MediaType mediaType) {
        return false;
    }

    @Override
    public boolean canWrite(Class clazz, MediaType mediaType) {
        return clazz.isAssignableFrom(person.class);
    }

    @Override
    public List<MediaType> getSupportedMediaTypes() {

        return MediaType.parseMediaTypes("application/x-mydefine");

    }

    @Override
    public person read(Class<? extends person> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        return null;
    }

    @Override
    //自定义的类型数据
    public void write(person person, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        String data = person.getName()+","+person.getAdress();
        OutputStream body = outputMessage.getBody();
        body.write(data.getBytes(StandardCharsets.UTF_8));
    }
}

然后在yaml文件配置:

spring:
  mvc:
#        内容协商
    contentnegotiation:
      favor-parameter: true
      media-types:   #媒体类型
        json:  application/json  #json类型
        xml: application/xml	#xml类型
        gg: application/x-mydefine  #自定义类型

给请求地址配上&format=json或&format=xml
例如
http://localhost:8080/test/person?format=xml
返回的数据是xml类型
&format=json返回的是json数据
浏览器地址栏:http://localhost:8080/test/person?format=gg 就可以得到自定义的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot中的内容协商是指根据请求的参数或者请求头中的信息来确定返回的内容类型。在SpringBoot中,默认开启了基于请求头的内容协商功能,即根据请求头中的Accept字段来确定返回的内容类型。同时,也可以通过配置开启基于请求参数的内容协商功能,即根据请求参数来确定返回的内容类型。\[1\]\[2\]内容协商SpringMVC中也有实现,但SpringMVC默认开启的是基于请求头的内容协商功能。\[1\]所以,如果你在SpringBoot中使用内容协商功能,可以直接使用默认的配置,而如果你在SpringMVC中使用内容协商功能,需要手动配置开启基于请求参数的内容协商功能。\[1\]\[2\]内容协商是一个非常重要的知识点,对于理解和掌握SpringBootSpringMVC的请求和响应处理机制非常有帮助。\[3\] #### 引用[.reference_title] - *1* *3* [SpringBoot中的内容协商,颠覆你的认知](https://blog.csdn.net/likun557/article/details/122994859)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Springboot-内容协商](https://blog.csdn.net/qq_42250642/article/details/116055710)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值