下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring特殊字符处理在使⽤Spring或SpringBoot时⼀些特殊的参数会被转义,或者因转义导致出现异常情况,本⽂汇总总结相关问题及解决⽅案,帮助⼤家快速定位和解决问题。问题⼀:参数特殊符号被后端转义WEB开发时,前端通过get/post⽅法传递参数的时,如果实参附带特殊符号,后端接收到的值中特殊符号就会被转义。后端接收到的name值中“(”和“)”被转义。针对此问题有以下解决⽅案:1、检查web.xml⾥是否配置了过滤特殊字符的filter,若不需要可以关掉此filter。2、java中可以使⽤mons.lang包中的publicstaticStringunescapeHtml(Stringstr)⽅法来进⾏解码。实践中尝试了很多⽅法没有解决,最后使⽤了该⽅法,将接收到的包含特殊字符的字符串通过该⽅法进⾏解码。3、在Controller接收的参数前加上@RequestBody注解,⽰例如下:@PostMapping(value="/add")@ResponseBodypublicStringaddMessage(@RequestBodyParamVoparams){}通常情况下,基于RESTful的API经常使⽤@RequestBody来⾃动绑定body中的请求参数到实体类对象。使⽤@RequestBody能解决⼤多数情况的问题,但某些特殊字符依旧⽆法正常解决,还需要通过⽅案⼆进⾏补充解决。使⽤该中⽅案进⾏数据交互时,前度对应的请求需要声明dataType和contentType,传递的参数并⽤JSON.stringify()转为json字符串。$.ajax({url:CONTEXTPATH+"/add",type:'POST',dataType:'JSON',contentType:'application/json',data:JSON.stringify(Data),success:function(data){}})问题⼆:/被转义成%2F导致400错误前端GET请求url中带有路径参数,参数中有/特殊字符,前端已经转义成了%2F,后端springboot并没有收到这个请求,直接返回了400的错误。原因:据说是tomcat默认是不⽀持转义的,需要⼿动设置⼀下转化,搜索tomcat的设置可以找到,但在springboot中内置的tomcat,在yml中找不到相关的配置。解决⽅案:修改启动类,添加系统参数并重写WebMvcConfigurerAdapter的configurePathMatch⽅法。@SpringBootApplicationpublicclassApplicationextendsWebMvcConfigurerAdapter{publicstaticvoidmain(String[]args)throwsException{System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH","true");SpringApplication.run(Application.class,args);}@OverridepublicvoidconfigurePathMatch(PathMatchConfigurerconfigurer){UrlPathHelperurlPathHelper=newUrlPathHelper();urlPathHelper.setUrlDecode(false);configurer.setUrlPathHelper(urlPathHelper);}}其中实现WebMvcConfigurerAdapter接⼝新版本中改为实现WebMvcConfigurer接⼝。重写的⽅法名称是⼀样的。该部分也可以单独在WebMvc的配置类中实现,⽽不是放在启动类。当然,设置tomcat的参数是需要写在main⽅法当中进⾏设置的。问题三:整合jackson的转义SpringBoot默认配置json转换⼯具就是Jackson,如果你此时使⽤的正是Jackson框架,那么可在配置⽂件中进⾏是否转义的配置,配置项如下:jackson⽇期格式化spring.jackson.date-format=yyyy-MM-ddHH:mm:ssspring.jackson.date-format=yyyy-MM-dd格式化输出spring.jackson.serialization.indent_output=true忽略⽆法转换的对象spring.jackson.serialization.fail_on_empty_beans=false设置空如何序列化spring.jackson.defaultPropertyInclusion=NON_EMPTY允许对象忽略json中不存在的属性spring.jackson.deserialization.fail_on_unknown_properties=false允许出现特殊字符和转义符spring.jackson.parser.allow_unquoted_control_chars=true允许出现单引号spring.jackson.parser.allow_single_quotes=true其中重点关注allow_unquoted_control_chars项的配置。当然,相应的配置如果是在配置类中实现的⾃定义ObjectMapper,可以在⾃定义时进⾏设置:@ConfigurationpublicclassJacksonConfig{@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)publicObjectMapperjacksonObjectMapper(Jackson2ObjectMapperBuilderbuilder){ObjectMapperobjectMapper=builder.createXmlMapper(false).build();objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS,true);objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES,true);objectMapper.getSerializerProvider().setNullValueSerializer(newJsonSerializer<Object>(){@Overridepublicvoidserialize(Objecto,JsonGeneratorjsonGenerator,SerializerProviderserializerProvider)throwsIOException{jsonGenerator.writeString("");}});returnobjectMapper;}}在类中做过修改中,配置⽂件中的配置将不再起作⽤。问题四:接收JSON时发⽣转义字符绑定对象失败在做Springboot项⽬时发⽣json转义字符绑定对象失败,原因是json⾥⾯有些字段包括空格,反斜杠等,如果框架没有对这些json进⾏转化时,就会报类似如下错误org.codehaus.jackson.JsonParseException:Illegalunquotedcharacter((CTRL-CHAR,code9)):hastobeescapedusingbackslashtobeincludedinstringvalueat[Source:java.io.StringReader@10cfc2e3;line:1,column:2461]解决办法:1、pom.xml⽂件增加fastjson依赖。<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.15</version></dependency>如果项⽬中已经引⼊则⽆需新增该依赖。2、增加配置类@SpringBootApplicationpublicclassJsonControllerextendsWebMvcConfigurerAdapter{@OverridepublicvoidconfigureMessageConverters(List<HttpMessageConverter<?>>converters){super.configureMessageConverters(converters);FastJsonHttpMessageConverterfastConverter=newFastJsonHttpMessageConverter();FastJsonConfigfastJsonConfig=newFastJsonCon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (新)医院感染工作计划完整版
- 2026年互联网承运运维服务合同
- 2026年大数据建设碳资产管理协议
- 2026年快消改造环保治理合同
- 2026年航天分销租赁托管合同
- 村居集体经济工作制度
- 领导带班下井工作制度
- 食品内部防疫工作制度
- 鱼苗过塘消毒工作制度
- 驻马店地区正阳县2025-2026学年第二学期五年级语文期末考试卷(部编版含答案)
- 艰难梭菌感染
- (2025版)血液净化模式选择专家共识解读
- 2026年北京市丰台区高三一模英语试卷(含答案)
- 材料力学试题库(含答案)
- 博物馆展厅安全工作制度
- 胰岛素注射部位轮换的标准化操作
- 老年共病患者个体化诊疗的精准策略
- 2026 年民政局制式离婚协议书正式范本
- 大车保养培训课件
- 胡麻油培训课件
- 压力容器安装安全专项施工方案
评论
0/150
提交评论