关于访问后端接口报404错误问题的解决方法(全网最细!)

目录
  • 前言
  • 第一点 后端接口能否访问
    • 情况一:server.servlet.context-path(项目访问路径)漏写或者名称写错
    • 情况二:类上面的@RequestMapping(“/demo”)注解里面的值漏写或者名称写错
    • 情况三:方法上面的@RequestMapping(“/demo”)注解里面的值漏写或者名称写错
    • 情况四:路径多写了一部分内容
  • 第二点 后端接口的返回值是否能够映射到前端页面
  • 总结

前言

当我们通过前端向后端发起一个请求调用后端接口时,经常会遇到404的问题。网上关于对404问题介绍的一大堆,其实404问题的本质就两点。

在介绍404问题之前先温习一个小的知识点——项目访问路径
项目访问路径:就是定位一个项目的路径,可以理解为项目名,但是一般这个名称是可以自定义的。在SpringBoot在2.0版本之前,在yml文件中配置项目访问路径时通过server.context-path配置,
而在SpringBoot在2.0版本之后使用server.servlet.context-path配置项目访问路径。

第一点 后端接口能否访问

在这里我贴出了一段代码,包括application.yml配置文件,后续所有的演示都基于这段代码与配置文件。

package com.redisson.controller;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/redisson")
public class RedissonController {

    @Autowired
    RedissonClient redissonClient;

    @RequestMapping("/testRedissonClient")
    public void TestRedisson() {
        System.out.println("testRedissonClient: "+redissonClient);
    }
}

我们开始调用一下接口,让404错误出现。(这里使用postman测试)

情况一:server.servlet.context-path(项目访问路径)漏写或者名称写错

情况二:类上面的@RequestMapping(“/demo”)注解里面的值漏写或者名称写错

情况三:方法上面的@RequestMapping(“/demo”)注解里面的值漏写或者名称写错

情况四:路径多写了一部分内容

总结:
端口号后面的访问路径书写错误,导致在访问后端接口时404问题的出现。像这种错误造成的直接后果就是请求无法进入到后端接口里。
.
解决方案:
出现404问题了,要认真排查访问接口的地址是否正确
一般请求访问的是:项目访问路径+类上面的@RequestMapping配置的value地址值+类上面的@RequestMapping配置的value地址值

第二点 后端接口的返回值是否能够映射到前端页面

对于接口访问路径书写正确,接口能访问成功的情况下仍然会出现404问题,具体操作案例如下。

package com.redisson.controller;

import com.redisson.bean.Person;
import com.redisson.utils.Msg;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/demo")
public class RedissonController {

    @Autowired
    RedissonClient redissonClient;

//    返回值是void,报404异常
    @RequestMapping("/testRedissonClient")
    public void TestRedisson() {
        System.out.println("testRedissonClient: "+redissonClient);
    }

//返回值是null,报404异常
    @RequestMapping("/testRedissonClient2_1")
    public Msg TestRedisson2_1() {
        System.out.println("testRedissonClient2_1: "+redissonClient);
        return null;
    }

//  返回值是空字符(比如 ""),报404异常
    @RequestMapping("/testRedissonClient2_2")
    public String TestRedisson2_2() {
        System.out.println("testRedissonClient2_2: "+redissonClient);
        return "";

    }

//  返回值是任意字符串(比如 "success"),报404异常
    @RequestMapping("/testRedissonClient2")
    public String TestRedisson2() {
        System.out.println("testRedissonClient2: "+redissonClient);
        return "success";
    }
//返回值是虽说是null,但是在@ResponseBody注解的加持下,则不会出现404异常问题
    @RequestMapping("/testRedissonClient3")
    @ResponseBody
    public Msg TestRedisson3() {
        System.out.println("testRedissonClient3: "+redissonClient);
        return null;
    }

    //返回值是虽说是空字符,但是在@ResponseBody注解的加持下,则不会出现404异常问题
    @RequestMapping("/testRedissonClient4")
    @ResponseBody
    public String TestRedisson4() {
        System.out.println("testRedissonClient4: "+redissonClient);
        return "";
    }
    //返回值是虽说是null,但是在@ResponseBody注解的加持下,则不会出现404异常问题
    @RequestMapping("/testRedissonClient5")
    @ResponseBody
    public String TestRedisson5() {
        System.out.println("testRedissonClient5: "+redissonClient);
        return null;
    }

    //返回值是是一个json对象,但是在@ResponseBody注解的加持下,则不会出现404异常问题
    @RequestMapping("/testRedissonClient6")
    @ResponseBody
    public Msg TestRedisson6() {
        System.out.println("testRedissonClient6: "+redissonClient);
        return Msg.success("访问成功!").data("person",new Person());
    }

    //返回值是是一个json对象,但是在没有@ResponseBody注解的加持下,则会出现404异常问题
    @RequestMapping("/testRedissonClient7")
    public Msg TestRedisson7() {
        System.out.println("testRedissonClient6: "+redissonClient);
        return Msg.success("访问成功!").data("person",new Person());
    }
}

总结:
1、 添加了@ResponseBody注解的方法,在请求访问到方法里面后,返回到前端页面时是不会报404异常的。原因是@ResponseBody注解修饰的方法其返回值是不经过视图解析器解析的。
.

2、端口号后面的访问路径书写正确,请求能够进入到接口中,但是在返回到前端页面时报404异常。像这种错误造成的直接后果就是响应结果无法在页面展示。
.
分析:
之所以会出现这种问题是因为springBoot默认在没有@ResponseBody注解的加持下的情况下,返回的结果是经过视图解析器去解析并且匹配一个合适的前端页面,然后将结果展示出来的。当我们在项目中没有书写相应的前端页面时,自然视图解析器解析的结果无法匹配到,因此报404异常.
. .
解决方案:
出现404问题了,首先排查有没有添加@ResponseBody注解,其次要认真排查我们在项目中没有书写相应的前端页面。
(1) 在controller类的方法上面或者controller类上面添加@ResponseBody注解
(2) 方法的返回值要在项目中能够找到对应的前端页面。

总结

到此这篇关于关于访问后端接口报404错误问题的解决方法的文章就介绍到这了,更多相关访问后端接口报404错误内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于访问后端接口报404错误问题的解决方法(全网最细!)

    目录 前言 第一点 后端接口能否访问 情况一:server.servlet.context-path(项目访问路径)漏写或者名称写错 情况二:类上面的@RequestMapping(“/demo”)注解里面的值漏写或者名称写错 情况三:方法上面的@RequestMapping(“/demo”)注解里面的值漏写或者名称写错 情况四:路径多写了一部分内容 第二点 后端接口的返回值是否能够映射到前端页面 总结 前言 当我们通过前端向后端发起一个请求调用后端接口时,经常会遇到404的问题.网上关于对40

  • Nginx报404错误的详细解决方法

    近日在部署项目时,出现了一些问题,如图 正常的登录界面是可以访问的,但是在登录之后访问之后的地址会报404错误,于是去查看是否配置有错误,但是查看之后发现,nginx.conf与config.js两个配置文件的ip和端口都是没有错误的 这个项目部署过好多次,没有出现过这样的错误. 这是原版没动过的解压缩后的nginx.conf的源文件 圈起来的地方是应该按照项目配置对应的ip和监听的端口 listen对应的是端口,server_name对应的是访问的ip 但是这样是不能解决问题,我们需要添加如下

  • Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法

    今天查看网站的源代码,发现有个glyphicons-halflings-regular.woff文件没有找到,因为我的网站使用了bootstrap的Glyphicons 字体图标,因此需要加载Glyphicons Halflings的相关文件,但是我的文件中明明有这个文件那怎么会报404错误呢? 查看了下博客上查到了解决方案 跟大家分享一下 在web.config 中添加如下代码段 <system.webServer> <staticContent> <remove file

  • ubuntu16.04下安装openssh-server报依赖错误的完美解决方法(非常不错)

    问题:系统重装后,安装和配置SSH,防火墙配置 #安装install openssh-server sudo apt install openssh-server -y 遇到问题: sudo apt install openssh-server -y 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装.如果您用的是 unstable 发行版,这也许是 因为系统无法达到您要求的状态造成的.该版本中可能会有一些您需要的软件 包尚未被创建或

  • vue中配置mint-ui报css错误问题的解决方法

    在vue2.0中引入了mint-ui后总是报一个css的错误 但是package.json中已经配置了css-loader style-loader ,webpack.config中也已经配置了css,还是报这个错误,相反,如果把webpack.config中css的配置注释掉就不会出错,这是为什么呢? 因为 在webpack.config中没有设置好css引入的目录,因为默认情况下我们只会引入/src/目录下的css, 但是mint-ui是要冲node_modules目录去引入的,所以在web

  • SQLyog连接MySQL8.0报2058错误的完美解决方法

    引言 用SQLyog连接MySQL8.0(社区版:mysql-installer-community-8.0.15.0.msi),出现错误2058(Plugin caching_sha2_password could not be loaded:xxxx),通过查询资料了解了该错误的原因并在本文中提出了该问题的方案. 原因 该错误提示如下图所示: 具体原因:新的MySQL 8.0安装,在初始化数据目录时,将 'root'@'localhost'创建帐户,并且该帐户caching_sha2_pas

  • springboot项目启动,但是访问报404错误的问题

    目录 springboot项目启动,访问报404错误 我的解决 springboot版本引起的404 环境描述 报错情况如下 springboot项目启动,访问报404错误 今天在做一个springboot项目的时候,是接着别人的项目写的,写完之后想做一下测试,于是就启动了springboot,然后在访问的时候,一直包404的错误,然后百度了一下网上给的方法,包括注解使用@RestController,然后去除掉方法@RequestMapping(value = "/add")中的&q

  • SpringMVC项目访问controller时候报404的解决

    目录 SpringMVC访问controller时候报404 在网上搜各种方法都没有解决 终于解决 SpringMVC 无法访问到controller的可能原因 从网上查的资料 SpringMVC访问controller时候报404 自己写的SpringMVC项目,突然发现访问controller路径的时候页面显示404,看控制台也没有报严重错误,只是说该路径找不到,并且单独访问jsp也能正常访问. 控制台报这种错误 No mapping found for HTTP request with

  • 关于vue项目部署后刷新网页报404错误解决

    目录 报404错误说明是路由的问题 router有两种模式 成功解决 我的项目,前端是vue项目在部署之后可以正常访问,流程没有问题,可是刷新之后浏览器会返回404错误. 部署使用的是nginx,经常用来部署项目,所以容器肯定没有问题, 这种问题在我直接启动时并没有出现过,所以可以猜测是打包时出现的问题, 报404错误说明是路由的问题 vue管理路由的是"router" 目标明确了,去找router的配置文件 import Vue from 'vue' import Router fr

  • nginx访问动态接口报错404Not Found问题解决

    目录 问题描述 解决思路 彻底解决 问题描述 计设做了一套招聘背调系统,前后端分别使用了Ant Design Vue与JFinal框架.想要将项目部署到服务器上,但是外部访问一直报错404Not Found 解决思路 把错误定位为:找不到动态接口,但是不知道是项目中出现了问题,还是经nginx代理后出现了问题.因此要分别测试 项目本身的接口 和 nginx代理后的接口. 首先测试项目内接口: 在ubuntu端输入命令:curl http://localhost:port/xxx/xxx 这里我的

随机推荐