Jackson2HttpMessageConverter

用处

  • SpringMVC中,controller中的方法返回java Bean对象,mvc将此对象转换成字符串
  • 默认支持的mediaType: MediaType.APPLICATION_JSON, new MediaType("application", "*+json"),也就json请求

为什么改造

想让url以.html结尾的请求走json请求的逻辑

现状

当后端使用如下方法编码时,url以.html为后缀,最终会响应406状态页面

后端@RestController返回java对象

@RequestMapping(value = "/data", method = {RequestMethod.POST, RequestMethod.GET})
public ApiResult data(HttpServletRequest httpServletRequest, String type, String param, Model model) {
return new ApiResult(2);
}

目标

修改后/data.html返回

{ "code" : 2 }

修改方式

/**
* 自定义的jackson到httpmessage的转换器
* Created by cdliujian1 on 2018/1/27.
*/
public class JMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter { /**
* Construct a new {@link MappingJackson2HttpMessageConverter} using default configuration
* provided by {@link Jackson2ObjectMapperBuilder}.
*/
public JMappingJackson2HttpMessageConverter() {
this(Jackson2ObjectMapperBuilder.json().build());
} /**
* Construct a new {@link MappingJackson2HttpMessageConverter} with a custom {@link ObjectMapper}.
* You can use {@link Jackson2ObjectMapperBuilder} to build it easily.
* @see Jackson2ObjectMapperBuilder#json()
*/
public JMappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
super(objectMapper);
List<MediaType> mediaTypes = getSupportedMediaTypes();
List<MediaType> newMediaTypes = new ArrayList<>();
newMediaTypes.add(MediaType.TEXT_HTML);
newMediaTypes.addAll(mediaTypes);
setSupportedMediaTypes(newMediaTypes);
} }

构造函数中,调用setSupportedMediaTypes方法,将MediaType.TEXT_HTML添加到当前HttpMessageConverter支持媒体类型中

这样当.html后缀结尾的链接到后端时,可以进入到MappingJackson2HttpMessageConverter的处理流程

MvcConfiguration

@Configuration
//@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter { @Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
.indentOutput(true)
.dateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); converters.add(new JMappingJackson2HttpMessageConverter(builder.build()));
converters.add(new MappingJackson2XmlHttpMessageConverter(builder.xml().build()));
}
}

自定义Jackson2HttpMessageConverter,适应.html后缀url的更多相关文章

  1. piwik获取访客头像,自定义显示访问者头像(URL)和描述(标题和替代)

    访客头像 自定义显示访问者头像(URL)和描述(标题和替代) 链接地址:https://plugins.matomo.org/VisitorAvatar#description

  2. 使用自定义的鼠标图标 --- cursor url

    前段时间在项目中遇到过 自定义鼠标图标 这一需求.由于一般我们用的鼠标样式大都是固定的几种,而 自定义鼠标图标 不是很常用到,所以对这一小知识点进行总结,以防忘记. 自定义鼠标图标 自定义鼠标图标 即 ...

  3. IIS7无后缀URL部署问题 MVC4 MVC URL映射 windows server 2008

    前言和中间一段都是我找到问题的过程和思维方法.没兴趣的可以直接跳过看后面的问题和解决. 前言: 问题发生在站点完成后,部署到服务器上.以为这个是最轻松的工作.结果悲剧了.windows server ...

  4. python 全栈开发,Day114(装饰器,排序规则,显示列,添加按钮,定制ModelForm,自定义列表页面,自定制URL)

    一.装饰器 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象. 装饰器的应用场景:比如插入日志,性能测试,事务处理, ...

  5. 自定义 Scrapy 爬虫请求的 URL

    之前使用 scrapy 抓取数据的时候 ,默认是在逻辑中判断是否执行下一次请求 def parse(self): # 获取所有的url,例如获取到urls中 for url in urls: yiel ...

  6. 模拟admin组件自己开发stark组件之自定义list_display,反向解析url

    反向解析 在上一篇文章中,我们创建好了stark这个组件,一个应用一个表有四个默认的url,那么我们如何区别这些url,因为可能会有重复现象(本组件不会,因为前面拼接了应用名,表明,肯定唯一),概念请 ...

  7. IIS7.5 自定义Html/shtml/htm...后缀映射

    以添加html后缀的文件的 映射为例: 1.打开iis管理器,点击 2.点击打开处理程序映射 3.添加托管处理程序映射 4.请求路径 *.html 类型: System.Web.UI.PageHand ...

  8. Zabbix自定义模板监控多个url接口

    一.脚本配置 1.监控脚本 /etc/zabbix/zabbix_agent2.d/scripts/web_site_code_status.sh #!/bin/bash url_discovery( ...

  9. dt二次开发之-url伪静态的自定义

    dt内核的方便性在于代码内核完全开源,都可以根据自身需要进行优化整改,个人在这段时间的深入研究,发现这套内核的方便性,今天继续给大家分享下DT的url伪静态如何自定义函数. url自定义文件是在api ...

随机推荐

  1. Java中toCharArray()方法

    Java中 toCharArray() 方法详解 <Thinking in Java>Chapter11中存在下列代码 package holding; import java.util. ...

  2. 1.4Hadoop伪分布式安装

  3. Window10 上MindSpore(CPU)用LeNet网络训练MNIST

    本文是在windows10上安装了CPU版本的Mindspore,并在mindspore的master分支基础上使用LeNet网络训练MNIST数据集,实践已训练成功,此文为记录过程中的出现问题: ( ...

  4. 【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?

    写在前面 今天,一名读者反馈说:自己出去面试,被面试官一顿虐啊!为什么呢?因为这名读者面试的是某大厂的研发工程师,偏技术型的.所以,在面试过程中,面试官比较偏向于问技术型的问题.不过,技术终归还是要服 ...

  5. Redis利用,攻击内网(ssrf)

    Redis语法 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C ...

  6. pytest封神之路第零步 快速入门

    背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...

  7. 什么是垃圾搜集(GC)?为什么要有GC呢?

    GC的全称是Gabage Collection,翻译过来就是"垃圾收集"的意思.那么我们为什么用GC呢? 那么我们接下来就来聊一聊GC的创造背景.在C和C++那个年代的程序员界的长 ...

  8. DOJO dataGrid 单击单元格选中行

    onCellClick: lang.hitch(this, function(event){ //单元格单击事件 var grid = dijit.byId("__geodisa_grid& ...

  9. 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和

    048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...

  10. 《C++ primerplus》第13章练习题

    1.对CD类的派生练习.基类CD类存储作者和作品号等信息,派生类Classic额外增加一格"主要作品"的信息.主函数使用拷贝构造函数.按引用传递参数的函数和指针来测试基类和派生类的 ...