SpringMVC实现对象序列化转换

简介

SpringMVC 对对象实现序列化转换,在我看来不是很好用,而且比较鸡肋,因为需要使用 Ajax 的方式进行提交才会比较好用

实现步骤

  1. 新建 MessageConverter 类,继承 AbstractHttpMessageConverter 类,并添加如下代码;注意 User 实体类只有两个属性:username 和 password
public class MessageConverter extends AbstractHttpMessageConverter < User > {
    public MessageConverter() {
        // 构造方法中指明consumes(req)和produces(resp)的类型,指明这个类型才会使用这个converter
        super(new MediaType("application", "x-user", Charset.forName("UTF-8")));
    }

    // 将字符串(a-b 格式)转化为对象
    @Override
    protected User readInternal(Class <? extends User > clazz, HttpInputMessage input) throws IOException, HttpMessageNotReadableException {
        String temp = StreamUtils.copyToString(input.getBody(), Charset.forName("UTF-8"));
        String[] obj = temp.split("-");
        return new User(obj[0], obj[1]);
    }

    @Override
    protected boolean supports(Class <? > clazz) {
        // 确定 user 类是否和 参数表示的类是否相同,或者是参数表示的类的父类
        return User.class.isAssignableFrom(clazz);
    }

    // 将对象转化为字符串
    @Override
    protected void writeInternal(User user, HttpOutputMessage out) throws IOException, HttpMessageNotWritableException {
        String temp = "hello: " + user.getUsername() + ", " + user.getPassword();
        out.getBody().write(temp.getBytes());
    }
}
  1. 在 SpringConfig 配置类中添加如下代码即可
@Configuration
@EnableWebMvc
@EnableScheduling
@ComponentScan("com.review.springmvc")
public class SpringConfig extends WebMvcConfigurerAdapter {
    // 添加转换器
    @Override
    public void extendMessageConverters(List < HttpMessageConverter <? >> converters) {
        converters.add(new MessageConverter());
    }
}
  1. 在 Controller 中,添加对应的方法
@PostMapping(value="/converter", produces={"application/x-user"})
@ResponseBody
public User convertUser(@RequestBody User user, Model model) {
    return user;
}
  1. 在 index.jsp 中添加如下 js 代码,请求转换
<script>
  $(function() {
    $("#btn").click(function() {
      $.ajax({
        url: "http://localhost:8080/review_springMVC/converter",
        data: "andy-123",
        type: "POST",
        contentType: "application/x-user",
        success: function(data) {
          console.log(data);
          $("#message").html(data);
        }
      });
    });
  });
</script>

如果是 xml 的配置方式,添加如下配置即可

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="com.study.spring.converter.MessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值