您的位置:首页 > 编程语言 > Java开发

spring boot之spring mvc常用配置--自定义HtppMessageConverter(9)

2018-02-10 13:49 381 查看
HttpmessageConvert是用来处理request和response里的数据的。Spring为我们内置了大量的HttpmessageConvert,
例如,MappingJackson2HttpMessageConverter/StringHttpMessageConverter等。

1.继承AbstractHttpMessageConverter实现自定义的HttpMessageConverterpackage com.boot.springmvc.messageconvert;

import java.io.IOException;
import java.nio.charset.Charset;

import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.util.StreamUtils;

import com.boot.springmvc.domain.DemoObj;

public class MymessageConverter extends AbstractHttpMessageConverter<DemoObj> {// 1继承AbstractHttpMessageConverter实现自定义的HttpMessageConverter

public MymessageConverter() {
super(new MediaType("application", "blog-zh", Charset.forName("UTF-8")));// 2构造函数中我们自定义媒体类型(application/blog-zh)
}

// 3重写readInternal方法,处理请求数据。
@Override
protected DemoObj readInternal(Class<? extends DemoObj> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
String temp = StreamUtils.copyToString(inputMessage.getBody(), Charset.forName("UTF-8"));
String[] tempArr = temp.split("-");
return new DemoObj(new Long(tempArr[0]), tempArr[1]);
}

// 4HttpMessageConverter只处理DemoObj这个类
@Override
protected boolean supports(Class<?> clazz) {
return DemoObj.class.isAssignableFrom(clazz);
}

// 5处理response响应的数据。
@Override
protected void writeInternal(DemoObj t, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
String out="hello"+t.getId()+"-"+t.getName();
outputMessage.getBody().write(out.getBytes());
}

}
2.MyMvcConfig配置/**
* 配置自定义的HttpMessageConverter
*注:
*1.configureMessageConverters:重载会覆盖掉spring mvc默认注册的 多个HttpMessageConverter。
*2.extendsMessageConverter:仅添加一个自定义 的HttpMessageConverter,不覆盖默认注册 的HttpMessageConverter.
**/
//使用extendsMessageConverter 添加一个自定义的HttpMessageConverter
@Bean
public MymessageConverter converter(){
return new MymessageConverter();
}

@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(converter());
}addviewControllers配置如下// 演示HttpMessageConverter
registry.addViewController("/converter").setViewName("/converter");3.控制器配置如下package com.boot.springmvc.web.ch4;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.boot.springmvc.domain.DemoObj;

@Controller
public class ConverterController {
@RequestMapping(value = "/convert", produces = { "application/blog-zh" }) // 1
public @ResponseBody DemoObj convert(@RequestBody DemoObj demoObj) {
return demoObj;
}

}
4.jsp配置<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>HttpMessageConverter Demo</title>
</head>
<body>
<div id="resp"></div><input type="button" onclick="req();" value="请求"/>
<script src="/assets/js/jquery.js" type="text/javascript"></script>
<script>
function req(){
$.ajax({
url: "convert",
data: "1-blog", //1
type:"POST",
contentType:"application/blog-zh", //2
success: function(data){
$("#resp").html(data);
}
});
}

</script>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: