HttpMessageConverter接口提供了5个方法:
canRead:判断该转换器是否能将请求内容转换成Java对象
canWrite:判断该转换器是否可以将Java对象转换成返回内容
getSupportedMediaTypes:获得该转换器支持的MediaType类型
read:读取请求内容并转换成Java对象
write:将Java对象转换后写入返回内容
其中read和write方法的参数分别有有HttpInputMessage和HttpOutputMessage对象,这两个对象分别代表着一次Http通讯中的请求和响应部分,可以通过getBody方法获得对应的输入流和输出流。
其中read和write方法的参数分别有有HttpInputMessage和HttpOutputMessage对象,这两个对象分别代表着一次Http通讯中的请求和响应部分,可以通过getBody方法获得对应的输入流和输出流。
使用的时候,可以extends AbstractHttpMessageConverter就可以了,比如下面的例子:
演示使用js向spring mvc发送自定义格式的字符串(属性用-隔开),通过自定义的HttpMessageConverter自动转换成对象,然后通过HttpMessageConverter输出指定格式到浏览器
public class Person { private String firstName; private String lastName; 。。。。
public class WiselyMessageConverter extends AbstractHttpMessageConverter<Person> { //自定义媒体类型 public WiselyMessageConverter(){ super(new MediaType("application", "x-wisely", Charset.forName("UTF-8"))); } //从request里获得构造Person实例的数据 @Override protected Person readInternal(Class<? extends Person> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { String temp = StreamUtils.copyToString(inputMessage.getBody(), Charset.forName("UTF-8")); String[] tempArr = temp.split("-"); return new Person(tempArr[0],tempArr[1]); } //只支持Person类 @Override protected boolean supports(Class<?> clazz) { return Person.class.isAssignableFrom(clazz); } //将person实例转换成你想要的字符串格式 @Override protected void writeInternal(Person person, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { String out = "hello:" +person.getFirstName() + "-" + person.getLastName(); outputMessage.getBody().write(out.getBytes()); } } 配置WiselyMessageConverter @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { WiselyMessageConverter converter = new WiselyMessageConverter(); converters.add(converter); }
@RequestMapping(value = "/convert", produces = { "application/x-wisely" }) public @ResponseBody Person convert(@RequestBody Person person) { return person; }
jsp页面
function req(){ $.ajax({ url: "convert", data: "wang-yunfei",//注意此处的格式 type:"POST", contentType:"application/x-wisely", success: function(data){ $("#resp").html(data); } }); }
另外不错的参考文参考:
http://www.scienjus.com/custom-http-message-converter/