栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot响应结果仲裁机制怎么解决?!

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot响应结果仲裁机制怎么解决?!

一. 异常描述

最近大连九哥有一个学生,在做项目时碰到了一个“奇怪”的问题,他发现当他在浏览器地址栏中输入接口的url地址后,浏览器中返回的响应内容不是json格式,而是xml格式,这个问题困扰了他一个下午。

二. 案例代码

这个问题其实也是Springboot面试时的常见问题,即Springboot对于响应结果的“仲裁机制”。

为了可以让大家能够详细的了解这个异常的产生原因,九哥给大家编写一个简单的案例来还原一下上述问题,并探讨Springboot响应结果的仲裁机制是怎么回事。

1.pom.xml文件



    4.0.0
    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.6.6
         
    
    
    com.example
    demo1
    0.0.1-SNAPSHOT
    demo1
    
    Demo project for Spring Boot
    
        1.8
    
    

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.projectlombok
            lombok
        

        
            com.fasterxml.jackson.dataformat
            jackson-dataformat-xml
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

2.User类

package com.example.demo1;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String name;
}

3.Demo1Application类

package com.example.demo1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@SpringBootApplication
@Controller
public class Demo1Application {

    public static void main(String[] args) {

        SpringApplication.run(Demo1Application.class, args);
    }

    @RequestMapping("/hello")
    @ResponseBody
    public User test1(){
        return new User(1,"lisi");
    }

}

三. 异常重现

1.开启日志功能

代码编写完毕之后,我们可以先打开springboot的debug日志功能,如下所示:

debug=true

2.访问接口地址

接下来我们就开始访问接口地址,当访问接口时会返回如下内容,这里果然是使用xml格式作为响应格式的,why?

2022-04-03 10:10:56.564 DEBUG 15072 --- [nio-8080-exec-8] o.s.web.servlet.DispatcherServlet        : GET "/hello", parameters={}
2022-04-03 10:10:56.564 DEBUG 15072 --- [nio-8080-exec-8] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.example.demo1.Demo1Application#test1()
2022-04-03 10:10:56.565 DEBUG 15072 --- [nio-8080-exec-8] m.m.a.RequestResponseBodyMethodProcessor : Using 'application/xhtml+xml', given [text/html, application/xhtml+xml, image/avif, image/webp, image/apng, application/xml;q=0.9, application/signed-exchange;v=b3;q=0.9, **;q=0.8] 
# springboot可以支持的响应格式
and supported [application/json, application*;q=0.8] and supported [application/json]
2022-04-03 11:03:35.428 DEBUG 7540 --- [nio-8080-exec-4] m.m.a.RequestResponseBodyMethodProcessor : Writing [User(id=1, name=lisi)]
2022-04-03 11:03:35.438 DEBUG 7540 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Completed 200 OK

2.前端解决--请求时明确想要的输出格式

另外我们其实也可以在前端发起request请求时,由请求发送方明确指定自己想要接受的响应类型,例如通过发送ajax请求,可以指定接受服务器端返回的json类型数据。

var xhr = new XMLHttpRequest();
xhr.open('get','/hello');
xhr.setRequestHeader('Accept','application/json');
xhr.send();

此时同样可以得到json格式的响应信息。

以后如果你也遇到了同样的问题,知道该怎么解决了吧?

*威哥Java学习交流Q群:691533824
加群备注:CSDN推荐

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号