SpringMVC探索中的404和406错误

最近初探了一下SpringMVC,发现其中的坑是真的多,对于小白而言,环境、配置、版本、路径都可能带来问题。

下面主要分享我遇到的两个问题,希望遇到同样问题的小伙伴能快速解决。

环境说明:

初始(出事)环境:java1.7+tomcat9+spring4.1.4+jackson1.9.10

修改后环境:java1.7+tomcat9+spring3.2.2+jackson1.9.10

1.404问题

404问题主要是页面找不到。那么多半是你的路径配置错误了。

1.检查一下你的Spring的servlet.xml中的路径,看是怎样的。

web.xml

<servlet>
		<servlet-name>mvc-dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc-dispatcher</servlet-name>
		<url-pattern>/csdn/*</url-pattern>
	</servlet-mapping>

mvc-dispatcher-serlvet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.1.xsd 
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
	<context:component-scan base-package="com.csdn.controller" />
	
	<mvc:annotation-driven />
</beans>

Spring的机制会根据web.xml中的servlet-name 找到mvc-dispatcher-servlet.xml文件(如果你填的是servlet-name是"abc",他就去找abc-servlet.xml),然后根据这个servlet.xml来找你的controller在哪,就是这里的<context:component-scan base-package="com.csdn.controller" />一句。然后你需要有自己的包,且包名和这里配置的一样,然后添加一个类,类名没有要求,但是类里面的声明需要使用Spring的@Controller注解。例如下:

@Controller
@RequestMapping("/test/login")
public class JSONController
{
	@RequestMapping(value = "{name}", produces ="application/json;charset=utf-8",method = RequestMethod.GET)
	@ResponseBody
	public CSDN getClouInJSON(@PathVariable String name)
	{

		System.out.println("-----请求JSON数据-------" + name);
		CSDN csdn = new CSDN();
		csdn .setName(name);
		csdn .setAge(new int[] { 11, 22 });
		return csdn ;

	}

由于之前配置的路径是/csdn/*,而这里配置的是@RequestMapping("/test/login"),所以我们最后部署到服务器之后需要输入的访问路径为http://localhost:8080/HelloSpringMVC/csdn/test/login/abc

访问结果:

JSON对象CSDN就交给各位自己发挥了。

2.406问题

我出现的406问题是:the server is unwilling to supply a default representation ...

这个问题不常见,所以出现了以后很难对症下药,本文也只能就个人遇到的情况进行说明,其他也有一些处理手法,但是对于我配置时出现的问题并没有解决。

本文使用@ResponseBody直接返回Json格式的数据,没有前端界面,直接显示JSon数据,出现的情况是,后端接收到了前端的url中的@PathValue数据,但是return之后不知道对象去哪了。

此时用Postman的话就只能看到406错误,此时可以利用chrome浏览器强大的调试功能,按F12检查报文头部,发现Response Header 始终是text/html,而我们返回的是并不是一个Html网页,所以他就罢工了。利用@RequestMapping 的 produces ="application/json” 描述,也依旧维持text/html,最后发现是spring 的版本问题,spring 4版本后不支持直接返回json,而本文参考的demo使用的是spring3。将Spring版本配置成3.2.2,重新Maven install等操作后,部署上线解决了406问题。

另外,对应的servlet需要有<mvc:annotation-driven />参见上面的mvc-dispatcher-serlvet.xml。

最后,确保你的Pom.xml中有jackson的相关依赖:本文采用的是1.9.10,其他版本可以自行尝试。

pom.xml片段:

<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>${jackson.version}</version>
			
		</dependency> 

以上内容为个人原创,谢绝抄袭,内容有误请在评论区指出,欢迎讨论。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值