栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring消息转换器使用详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring消息转换器使用详解

本文实例为大家分享了spring消息转换器的具体代码,供大家参考,具体内容如下

//domain

package com.crazy.goods.tools;

public class Phone {
  private String qno;
  private String number;
  public String getQno() {
    return qno;
  }
  public void setQno(String qno) {
    this.qno = qno;
  }
  public String getNumber() {
    return number;
  }
  public void setNumber(String number) {
    this.number = number;
  }
  
}

//消息转换器  要实现一个抽象类AbstractHttpMessageConverter

package com.crazy.goods.tools;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

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

public class MyMessageConvertor extends AbstractHttpMessageConverter {

  
  
  @Override
  protected Phone readInternal(Class arg0,
      HttpInputMessage msg) throws IOException,
      HttpMessageNotReadableException {
    //参数必须使用post提交必须在body中
    InputStream is=msg.getBody();
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
    String param=br.readLine();
    String phone=param.split("=")[1];
    Phone phoneObj=new Phone();
    phoneObj.setQno(phone.split("-")[0]);
    phoneObj.setNumber(phone.split("-")[1]);
    return phoneObj;
  }
  
  @Override
  protected boolean supports(Class arg0) {
    if(arg0==Phone.class){
      return true;
    }
    return false;
  }
  
  @Override
  protected void writeInternal(Phone phone, HttpOutputMessage arg1)
      throws IOException, HttpMessageNotWritableException {
    String p=phone.getQno()+"-"+phone.getNumber();
    arg1.getBody().write(p.getBytes("UTF-8"));
  }

}

//springmvc.xml 要配置bean:消息转换器,只有post提交方式才会被转换器拦截



  
  
    
    
  
  
  
  
    
      
 
   
     text/html;charset=UTF-8
      application/x-www-form-urlencoded
   
 
      
    
  

servlet测试

package com.crazy.goods.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import com.crazy.goods.tools.Phone;


@Controller
public class ReservePageServelt {

// 
// @RequestMapping(value="/add",method={RequestMethod.GET})
// public String doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// req.getRequestDispatcher("/reversegood.jsp").forward(req, resp);
// return "/reversegood.jsp";
// resp.getWriter().print(testid);
// }


//消息转换器思路,

//原理就是将请求体或者请求头的数据转换为action方法的参数,同时将方法的返回值的内容转换为响应头
//当url路径访问过来时,看到使用了@RequestBody注解,这个注解标识这个类要被消息转换器处理,就会springmvcxml文件中读到消息转换器,然后进入supports方法
//判断这个类是否被指定的转换器支持,如果支持,就调用readInternal方法,进行切割,然后将值传递到对象中,处理完成为对象之后,就会调用writeInternal转换为响应头
@RequestMapping(value="/add")
@ResponseBody
public Phone messageConvertor( @RequestBody Phone phone,HttpServletResponse response) {
System.out.println(phone.getQno()+phone.getNumber());
return phone;

}

}

总结:消息转换器的原理就是,自定义将请求体的数据转换为形参(对象),然后将方法的返回值内容转换为响应头

步骤:

当url路径访问过来时,看到使用了@RequestBody注解,这个注解标识这个类要被消息转换器处理,就会springmvcxml文件中读到消息转换器,然后进入supports方法
判断这个类是否被指定的转换器支持,如果支持,就调用readInternal方法,进行切割,然后将值传递到对象中.

处理完成为对象之后,就会调用writeInternal转换为响应头

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/145390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号