java406错误_Java项目部署遇到406错误[通俗易懂]

1、406错误发生406错误的原因是服务器传递回来的值客户端无法解析。通过在谷歌浏览器的开发浏览器查看代码,发现RequestHeader的Accept格式为application/json格式,而服务器传回的报文中ResponseHeader的格式却为text/html,导致js解析不了数据,报406错误。因此,我们需要将服务器的数据先转换成json,再将其以application/json的C…

大家好,又见面了,我是你们的朋友全栈君。

1、406错误

发生406错误的原因是服务器传递回来的值客户端无法解析。通过在谷歌浏览器的开发浏览器查看代码,发现RequestHeader的Accept格式为application/json格式,而服务器传回的报文中ResponseHeader的格式却为text/html,导致js解析不了数据,报406错误。因此,我们需要将服务器的数据先转换成json,再将其以application/json的Content-type传回给客户端,需要导入jackson的jar包。

com.fasterxml.jackson.core

jackson-core

2.9.10

com.fasterxml.jackson.core

jackson-annotations

2.9.10

com.fasterxml.jackson.core

jackson-databind

2.9.10

jackson包的可选对象有很多,包括 com.fasterxml.jackson、org.codehaus.jackson、com.alibaba.fastjson,那么为什么要选fasterxml呢?选它的依据在哪呀?之后会提到。

显然,只导包是没有用的,我们得有工具去转换对象,这里jackson包已经给我们提供了工具类。

在讲工具类前,我们先要了解一点知识,那就是@ResponseBody这个注解:

对于没有添加@ResponseBody注解的Controller方法,其返回值应该是一个View,即一个具体的视图交给DispatcherServlet,然后由配置好的ViewResolver去解析这个View。SpringMVC框架提供了好几种视图解析器,我主要讲一个:internalResourceViewResolver,它将视图解析为Web的内部资源,通常为JSP。若方法返回的是ModelAndView,则视图解析器根据View的name来定位资源,若方法返回的是字符串,则将该字符串当作View的name,用它来定位资源。

而对于添加了@ResponseBody注解的Controller方法(等价于@RestController),其返回值不作为视图资源定位的依据,而是通过一个转换器将返回对象转换成json格式传递给调用方。org.springframework.http.converter.json.MappingJackson2HttpMessageConverter  就是这样的一个转换器,他由Spring框架提供,能将对象转换成json格式再进行回传。

通过查看这个对象,发现它有  com.fasterxml.jackson  包对象的引用,故如果想使用它,必须导入fasterxml的jar包。

配置转换器的方式有两种:注解和非注解方式

application/json;charset=UTF-8

text/html;charset=UTF-8

注意:注解注入的转换器优先级要高于普通注入的json转换器。SpringMVC 默认只知其5个tag,分别是 mvc:annotation-driven,mvc:interceptors,mvc:view-controller,mvc:resources 和 mvc:default-servlet-handler。若要支持 mvc:message-converters 标签,需要在 classpath 下有对应 jar 包,然后配置文件配置正确:对于 spring-mvc.xml 中的 schema ,若配置为 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd,则该标签无法正常使用,而若配置为这样 http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd (3.1及以上),则该标签可以正常使用。

2、在pom.xml文件中添加jackson包依赖后,仍然报错java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException的原因

通过查看导出文件夹中的lib文件,发现没有fasterxml包,这是为什么呢?

检查project structure,在artifact中发现war部署文件中没有添加新添加的fasterxml包,将其依赖添加进war部署后,重新启动成功。

参考文章:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126953.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ip地址子网掩码默认网关dns的含义_子网掩码和默认网关的作用

    ip地址子网掩码默认网关dns的含义_子网掩码和默认网关的作用转载于:https://www.cnblogs.com/JuneWang/p/3917697.htmlIP地址,子网掩码,默认网关,DNS服务器是什么意思?(一)问题解析001.问:IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不能上外网,可它们都有什么功能,有什么区别呢?还有真奇怪,我的计算机没设DNS,竟然能上QQ,却不能打开网页,这是为什么呢>答:IP是32位二进制数据,通常以十进制表示,并以“.”…

    2022年9月29日
    2
  • 【6】进大厂必须掌握的面试题-Hibernate

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 1.什么是Hibernate Framework? 对象关系映射或对象关系管理(ORM)是将应用程序域模型对象映射到…

    2021年6月23日
    93
  • dfs是什么意思_英语单词搜索软件

    dfs是什么意思_英语单词搜索软件给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例 1:输入:board = [[“o”,”a”,”a”,”n”],[“e”,”t”,”a”,”e”],[“i”,”h”,”k”,”r”],[“i”,”f”,”l”,”v”]], words = [“oath”,

    2022年8月8日
    5
  • 胡崧讲Dreamweaver视频教程

    胡崧讲Dreamweaver视频教程胡崧讲Dreamweaver视频教程01胡崧讲Dreamweaver视频教程02 胡崧讲Dreamweaver视频教程03胡崧讲Dreamweaver视频教程04胡崧讲Dreamweaver视频教程05胡崧讲Dreamweaver视频教程06胡崧讲Dreamweaver视频教程07胡崧讲Dreamweaver视频教程08胡崧讲Dre…

    2022年5月10日
    33
  • 素数算法的优化之路

    素数算法的优化之路素数算法的优化之路

    2022年6月20日
    28
  • vue分页组件动态页码_vue怎么添加图片

    vue分页组件动态页码_vue怎么添加图片条件查询绑定每次都是从第一页开始,不然就有跳转页数出错:

    2022年9月30日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号