SpringMVC返回不带引号的字符串方案汇总

news/2025/1/15 14:56:35/

SpringMVC返回不带引号的字符串方案汇总

问题

项目使用springboot开发的,大部分出参为json,使用的fastJson。

现在有的接口需要返回一个success字符串,发现返回结果为“success”,多带了双引号。这是因为fastJson对出参做了处理。

方案一:fastJson添加string类型的解析器(推荐)

创建一个配置类

@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter {@Beanpublic StringHttpMessageConverter stringHttpMessageConverter(){return new StringHttpMessageConverter(StandardCharsets.UTF_8);}@Beanpublic FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();converter.setFeatures(SerializerFeature.DisableCircularReferenceDetect);converter.setCharset(StandardCharsets.UTF_8);return converter;}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {//添加字符转解析器converters.add(stringHttpMessageConverter());//添加json解析器converters.add(fastJsonHttpMessageConverter());}@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {converters.clear();converters.add(stringHttpMessageConverter());converters.add(fastJsonHttpMessageConverter());}
}

方案二:修改springMVC配置文件(springMVC)

网上通用的办法是在springMVC配置文件spring-servlet.xml中加入如下配置项:

<mvc:annotation-driven><mvc:message-converters>  <!-- 去除返回字符串时的引号,处理字符串引号配置要放在上面! --><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /><!-- 避免出现乱码 -->  <property name="supportedMediaTypes">  <list>  <value>text/plain;charset=UTF-8</value>  </list>  </property></bean><!-- 其他处理 -->  <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /></mvc:message-converters> 
</mvc:annotation-driven>

也可以在applicationContext-velocity.xml,配置JSON返回模板时直接配置进去

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 返回JSON模版 --><bean id="mappingJackson2HttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/json;charset=UTF-8</value><!-- <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> --></list></property></bean><bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter" /><beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="messageConverters"><list><ref bean="mappingJackson2HttpMessageConverter" /><ref bean="stringHttpMessageConverter" /></list></property></bean><!-- 配置视图的显示 --><bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">  <property name="prefix" value="/" /><property name="suffix" value=".html" /><property name="contentType" value="text/html;charset=UTF-8" /><property name="requestContextAttribute" value="request"/><!-- <property name="toolboxConfigLocation" value="/velocity-toolbox.xml" />--><property name="dateToolAttribute" value="dateTool" /><property name="numberToolAttribute" value="numberTool" /><property name="exposeRequestAttributes" value="true" /><property name="exposeSessionAttributes" value="true" /></bean>
</beans>

方案三:重写Jackson消息转换器的writeInternal方法(springMVC)

创建一个MappingJackson2HttpMessageConverter的工厂类

public class MappingJackson2HttpMessageConverterFactory {private static final Logger logger = getLogger(MappingJackson2HttpMessageConverterFactory.class);public MappingJackson2HttpMessageConverter init() {return new MappingJackson2HttpMessageConverter(){/*** 重写Jackson消息转换器的writeInternal方法* SpringMVC选定了具体的消息转换类型后,会调用具体类型的write方法,将Java对象转换后写入返回内容*/@Overrideprotected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {if (object instanceof String){logger.info("在MyResponseBodyAdvice进行转换时返回值变成String了,不能用原来选定消息转换器进行转换,直接使用StringHttpMessageConverter转换");//StringHttpMessageConverter中就是用以下代码写的Charset charset = this.getContentTypeCharset(outputMessage.getHeaders().getContentType());StreamUtils.copy((String)object, charset, outputMessage.getBody());}else{logger.info("返回值不是String类型,还是使用之前选择的转换器进行消息转换");super.writeInternal(object, type, outputMessage);}}private Charset getContentTypeCharset(MediaType contentType) {return contentType != null && contentType.getCharset() != null?contentType.getCharset():this.getDefaultCharset();}};}
}

在spring mvc的配置文件中添加如下配置

<mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"><property name="supportedMediaTypes"><list><value>image/jpeg</value><value>image/png</value><value>image/gif</value></list></property></bean><bean  factory-bean="mappingJackson2HttpMessageConverterFactory" factory-method="init"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" ></bean></mvc:message-converters></mvc:annotation-driven><bean id="mappingJackson2HttpMessageConverterFactory" class = "com.common.MappingJackson2HttpMessageConverterFactory" />

方案四:response.getWriter().write()写到界面

 @PostMapping("/test")public void test(@RequestBody Req req, HttpServletResponse response) throw Exception{res = service.test(req);response.getWriter().write(res);response.getWriter().flush();response.getWriter().close();}

方案五:重写json的MessageCoverter

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {@Beanpublic StringHttpMessageConverter stringHttpMessageConverter() {return new StringHttpMessageConverter();}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(stringHttpMessageConverter());}
}
@Configuration
@Slf4j
public class WebMvcConfig extends WebMvcConfigurationSupport {/*** 使用fastjson转换器* * @param converters*/@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {super.configureMessageConverters(converters);FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig = new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.DisableCircularReferenceDetect);List<MediaType> supportedMediaTypes = new ArrayList<>();supportedMediaTypes.add(MediaType.APPLICATION_JSON);supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);supportedMediaTypes.add(MediaType.APPLICATION_PDF);supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);supportedMediaTypes.add(MediaType.APPLICATION_XML);supportedMediaTypes.add(MediaType.IMAGE_GIF);supportedMediaTypes.add(MediaType.IMAGE_JPEG);supportedMediaTypes.add(MediaType.IMAGE_PNG);supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);supportedMediaTypes.add(MediaType.TEXT_HTML);supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);supportedMediaTypes.add(MediaType.TEXT_PLAIN);supportedMediaTypes.add(MediaType.TEXT_XML);fastConverter.setSupportedMediaTypes(supportedMediaTypes);fastConverter.setFastJsonConfig(fastJsonConfig);converters.add(fastConverter);}}

参考:

SpringMVC返回字符串去掉引号:https://blog.csdn.net/u013268066/article/details/51603604

Spring MVC中对response数据去除字符串的双引号:https://blog.csdn.net/qq_26472621/article/details/102678232

解决springMvc返回字符串有双引号:https://blog.csdn.net/weixin_45359027/article/details/97131384

springmvc返回不带引号的字符串:https://blog.csdn.net/weixin_34390996/article/details/92531295

SpringBoot返回字符串,多双引号:https://blog.csdn.net/baidu_27055141/article/details/91544019


http://www.ppmy.cn/news/1115975.html

相关文章

C++--哈希表的实现及unorder_set和unorder_map的封装

1.什么是哈希表 哈希表是一种数据结构&#xff0c;用来存放数据的&#xff0c;哈希表存放的数据是无序的&#xff0c;可以实现增删查&#xff0c;当时不能修改数据。可以不经过任何比较&#xff0c;一次直接从表中得到要搜索的元素。如果构造一种存储结构&#xff0c;通过某种函…

【DETR】End-to-End Object Detection with Transformers

End-to-End Object Detection with Transformers   整个模型的主要思想是把物体检测问题看作一个集合到集合的预测问题&#xff0c;将图片切分成一个个Patches。然后进行位置编码&#xff0c;利用Transformer Encoder和Decoder进行编码和解码&#xff0c;最后使用FFN进行分类…

golang 自动生成文件头

安装koroFileHeader控件 打开首选项&#xff0c;进入设置&#xff0c;配置文件头信息"fileheader.customMade": {"Author": "lmy","Date": "Do not edit", // 文件创建时间(不变)// 文件最后编辑者"LastEditors"…

5.14 Get Log Page Command

5.14 Get Log Page command “Get Log Page”命令返回一个数据缓冲区&#xff0c;其中包含请求的日志页。 Get Log Page命令使用Data Pointer&#xff0c;DWord10, DWord11, DWord12, DWord13, DWord14这几个字段。其他命令字段是保留的。 图191和图192中定义了强制和可选的日…

Postgresql并行框架随手记

使用方法 EnterParallelMode()CreateParallelContext(“library_name”, “function_name”, nworkers) 指定并发数&#xff0c;bgworker拉起几个进程干活。 shm_toc_estimate_chunk/shm_toc_estimate_keys 评估大小写入pcxt->estimator 先评估全部要进入共享内存的大小。 …

Linux 在线解压jar包

在 CentOS 中解压 jar 包可以使用 unzip 命令。unzip 命令用于解压缩各种压缩文件&#xff0c;包括 jar 包。 以下是解压 jar 包的步骤&#xff1a; 将 jar 包下载到本地。使用 unzip 命令解压 jar 包。 # 解压 jar 包 unzip jar_file.jar例如&#xff0c;要解压 jar_file.j…

Windows10下的GTSAM因子图安装与使用

Windows10下的GTSAM因子图安装与使用 一、windows系统预安装1. windows 10安装gcc2.windows 10 安装 boost3.CMake 安装与查看4.CMake 配置boost 二、GTSAM安装与使用三、CMAKE 创建立 使用GTSAM的Visual Studio项目参考文献 一、windows系统预安装 1. windows 10安装gcc htt…

大数据分析(Python)学习笔记1(python基础快速过)

第 1 部分 基础篇 第1章 Python语言基础 1.2 语法基础&#xff08;快速过一遍&#xff09; 1.代码注释方式 注释代码有以下两种方法&#xff1a; &#xff08;1&#xff09;在一行中&#xff0c;“#”后的语句不被执行&#xff0c;表示被注释。 &#xff08;2&#xff09…