`

spring mvc 中自定义HttpMessageConverter

 
阅读更多
  在spring mvc中,大家对@responsebody,@requestbody用的比较多了,它们是可以自定义的

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/
分享到:
评论

相关推荐

    使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

    本文将深入探讨如何利用 Spring 3 MVC 中的 HttpMessageConverter 构建高效的 RESTful API。 1. **RESTful Web 服务基础** REST(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序。它...

    spring-mvc-官方中文文档

    11. **验证**:Spring MVC 集成了 Bean Validation API,允许开发者对模型数据进行校验,通过 @Valid 注解和 ConstraintValidator 实现自定义验证规则。 12. **消息转换**:Spring MVC 提供了 HttpMessageConverter...

    spring MVC 对 ResponseBody返回json数据进行脱敏处理

    在Spring MVC框架中,开发Web应用时经常需要将对象转换为JSON格式的数据并返回给客户端。然而,在处理敏感数据时,我们可能希望对这些数据进行脱敏,即隐藏或替换某些字段,以保护用户隐私或者确保数据安全性。本文...

    spring mvc4 详细教程 PDF

    11. 处理JSON,Spring MVC提供了HttpMessageConverter来处理JSON数据。 12. 国际化支持,允许开发者构建支持多语言的应用程序。 13. 文件上传功能,可以处理用户上传的文件。 14. 使用拦截器进行请求预处理和后...

    spring mvc常用包

    4. **配置问题**:在某些情况下,可能需要在Spring配置中显式注册`MappingJackson2HttpMessageConverter`,特别是当你使用的是较早版本的Spring,或者有自定义的转换器配置。例如: ```java @Configuration @...

    Spring mvc Json处理实现流程代码实例

    为了返回JSON响应,只需在控制器方法中返回Java对象,Spring MVC会自动调用合适的HttpMessageConverter(如`MappingJackson2HttpMessageConverter`)将对象转换成JSON字符串,并设置响应内容类型为`application/json...

    Spring MVC 4.3.4

    10. **消息转换器**:Spring MVC包含一系列的消息转换器,如StringHttpMessageConverter、Jackson的MappingJackson2HttpMessageConverter,它们负责将HTTP请求和响应转换为JSON、XML等格式。 在实际开发中,Spring ...

    Spring MVC中默认的ResponseBody为String的乱码问题.pdf

    1. 自定义配置:在Spring的配置文件中,通过`&lt;mvc:annotation-driven&gt;`或`@EnableWebMvc`注解启用基于注解的配置,并自定义MessageConverter,将StringHttpMessageConverter的默认字符集改为UTF-8。但这种方法可能会...

    spring mvc生成xml或json

    在Spring MVC框架中,开发人员经常需要处理不同的数据交换格式,如XML和JSON,以便与客户端进行交互。这两种格式在Web应用中广泛用于传输数据,因为它们轻量级且易于解析。下面我们将深入探讨如何在Spring MVC中生成...

    Spring MVC 3.0实战指南.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...

    Spring MVC 数据转换和格式化.docx

    `MappingJackson2HttpMessageConverter`是Spring MVC中用于处理JSON数据的典型转换器。这个转换器依赖于Jackson库,能够将Java对象转换为JSON字符串,以及将JSON字符串解析为Java对象。在配置文件中,我们需要声明这...

    springmvc最新依赖jar包_完整版

    13. **消息转换器**:Spring MVC 内置了多种消息转换器,如 StringHttpMessageConverter、MappingJackson2HttpMessageConverter,用于处理 JSON、XML 等格式的请求和响应。 14. **上传文件**:Spring MVC 提供了...

    spring mvc工作流程

    此外,Spring MVC 还提供了丰富的扩展点,使得开发者可以根据实际需求自定义各种功能,如错误处理、国际化支持等。这种高度的灵活性和强大的功能使得 Spring MVC 成为了构建企业级 Web 应用程序的首选框架之一。

    spring mvc 3.2 rest配置 文件

    默认情况下,Spring MVC 3.2已经包含了这些转换器,但你可以根据需求进行自定义配置。 ```xml &lt;bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/&gt; &lt;bean class="org....

    spring mvc 使用jquery 传json值给Controller时需要解决的问题

    如果Spring MVC默认的`HttpMessageConverter`不能满足需求,可以自定义配置,添加自定义的转换器。例如,如果你需要支持特定的日期格式,可以创建一个自定义的`MappingJackson2HttpMessageConverter`并注册到Spring...

    第三章 Spring MVC Servlet API与Json的支持

    开发者可以通过自定义`@Configuration`类,配置Spring MVC的`HttpMessageConverters`,以满足特定的JSON转换需求。 在实际开发中,我们可能会遇到以下场景: 1. 使用`@RequestBody`注解解析请求体中的JSON数据,将...

    javaspring,mvc,

    Spring MVC 自带了多种消息转换器,如`HttpMessageConverter`,用于处理HTTP请求和响应之间的数据转换,如JSON、XML等格式。 9. **国际化与本地化** Spring MVC 支持基于HTTP请求头或session的国际化和本地化处理...

    springMVC rest风格视图解析

    在现代Web应用开发中,Spring MVC作为Java领域最流行的MVC框架之一,为开发者提供了强大的功能,包括构建RESTful API。REST(Representational State Transfer)风格的架构设计是Web服务的一种理想模式,它强调资源...

    Spring3MVC注解教程.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及...

    Spring MVC

    在 Spring MVC 中,请求地址映射是通过 `@RequestMapping` 注解完成的,它可以标注在类级别或方法级别。该注解支持多种 URL 表达式,包括标准的 URL、Ant 风格的 URL 和带 `{xxx}` 占位符的 URL。 #### Ant 风格的 ...

Global site tag (gtag.js) - Google Analytics