首页 > 其他分享 >SpringBoot: 自定义HttpMessageConverter

SpringBoot: 自定义HttpMessageConverter

时间:2023-02-18 13:00:43浏览次数:50  
标签:HttpMessageConverter SpringBoot 自定义 springframework userInfo org import new User


一、定义类继承自AbstractHttpMessageConverter

package cn.edu.tju.config;

import cn.edu.tju.UserInfo;
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 java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class MyHttpMessageConverter extends AbstractHttpMessageConverter<UserInfo> {
public MyHttpMessageConverter() {
super(new MediaType("application", "amadeus", Charset.forName("UTF-8")));
}
@Override
protected boolean supports(Class<?> clazz) {
return UserInfo.class.isAssignableFrom(clazz);
}

@Override
protected UserInfo readInternal(Class<? extends UserInfo> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
String temp = StreamUtils.copyToString(inputMessage.getBody(), Charset.forName("UTF-8"));
String[] stringArray = temp.split("-");
UserInfo userInfo= new UserInfo();
userInfo.setUsername(stringArray[0]);
userInfo.setPassword(stringArray[1]);
return userInfo;
}

@Override
protected void writeInternal(UserInfo userInfo, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
String stringToWrite=userInfo.getUsername()+":"+userInfo.getPassword();
outputMessage.getBody().write(stringToWrite.getBytes());
}

/* @Override
public List<MediaType> getSupportedMediaTypes(Class<?> clazz) {
MediaType mediaType = new MediaType("application", "amadeus", Charset.forName("UTF-8"));
List<MediaType> mediaTypeList=new ArrayList<>();
mediaTypeList.add(mediaType);
return mediaTypeList;
}*/
}

其中构造方法中super(new MediaType(“application”, “amadeus”, Charset.forName(“UTF-8”)));指定了要处理的请求头的类型为:
application/amadeus;charset=utf-8
二、将上述converter注册到Spring Mvc

package cn.edu.tju.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {

public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(converter());
}

@Bean
public MyHttpMessageConverter converter() {
return new MyHttpMessageConverter();
}

}

三、请求时设定请求头:

SpringBoot: 自定义HttpMessageConverter_spring boot


四、定义controller

@RequestMapping("/info4")
public UserInfo info4(@RequestBody UserInfo info) {
UserInfo userInfo=new UserInfo();
String prefix="[pre]";
userInfo.setUsername(prefix+info.getUsername());
userInfo.setPassword(prefix+info.getPassword());
return userInfo;
}

五、请求和响应:

SpringBoot: 自定义HttpMessageConverter_spring boot_02


标签:HttpMessageConverter,SpringBoot,自定义,springframework,userInfo,org,import,new,User
From: https://blog.51cto.com/amadeusliu/6065407

相关文章

  • 自定义比较 PersonT
    classPersonT{public: PersonT(doubleD0,doubleD1,doubleD2,stringstrNUMBER,doubleDX,doubleDY,doubleDZ,doubleDTAG) { this->M_D0=D0; this->M_D1......
  • 调用自定义的SplitString函数对字符串进行分割
    voidSplitString(conststd::string&s,std::vector<std::string>&v,conststd::string&c){ std::string::size_typepos1,pos2; pos2=s.find(c); pos1=0; while......
  • ASP.NET Core - 自定义中间件
    上一章讲了请求管道与中间件的基本概念和工作模式,也介绍了ASP.NETCore中内置的中间件,这一章介绍一下如何自定义中间件,这是很常用也很重要的内容,日常工作中很多场景我们......
  • helm 之 自定义values
    在第一节中只会使用chart的默认配置选项。很多时候,我们需要自定义chart来指定我们想要的配置。第一步查看chart中定义的valueshelmshowvaluesbitnami/mysql[roo......
  • MyBatis-Plus (SpringBoot2 版) Learning Day01
    Day01学习任务了解Mybatis-Plus整合Mybatis-Plus通用CRUDMybatis-Plus的配置条件构造器1、了解Mybatis-plus1.1、Mybatis-Plus介绍MyBatis-Plus(简称......
  • SpringBoot 多环境切换
    日常开发中一般都会有三个不同的环境,分别是开发环境(dev),测试环境(test)和生产环境(prod),不同的环境各种配置都不相同,比如数据库配置,服务器端口等等。SpringBoot多环境配置Sp......
  • SpringBoot集成Logback遇到的问题
     SpringBoot集成Logback遇到的问题https://zhuanlan.zhihu.com/p/540737614 解决log4j和self4j日志报错CouldNOTfindresource[logback.groovy]及CouldNOTfindr......
  • SpringBoot学习记录(1)——@Autowired在集合上的作用
    publicclassSmsHandlerextendsBaseHandlerimplementsHandler{@AutowiredprivateMap<String,SmsScript>smsScripts;//......}例如如上,一个......
  • 【MybatisPlus】条件构造器Wrapper、分页查询、自定义SQL、Service层接口、代码生成器
    MybatisPlus基础篇(目录)1.条件构造器Wrapper1.1概述​ 我们在实际操作数据库的时候会涉及到很多的条件。所以MP为我们提供了一个功能强大的条件构造器Wrapper。使......
  • springboot接入kafka
    1、windows下安装、启动kafka,这一步只是搭建环境​​https://blog.51cto.com/u_15595167/6026035​​2、安装kafka管理工具:kafkamanager,推荐linux下安装,windows下编译等很麻......