• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SpringBoot 请求参数忽略大小写的实例

springboot 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

我就废话不多说了,大家还是直接看代码吧~

import java.io.IOException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Map; 
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse; 
import org.springframework.core.annotation.Order;
import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.web.filter.OncePerRequestFilter;
 
@Order(1)
//重点
@WebFilter(filterName = "caseInsensitiveFilter", urlPatterns = "/*")
public class CaseInsensitiveRequestParameterNameFilter extends OncePerRequestFilter {
 
	public CaseInsensitiveRequestParameterNameFilter() {
		System.out.println("CaseInsensitiveRequestParameterNameFilter.CaseInsensitiveRequestParameterNameFilter()");
	}
	
 @Override
 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
  throws ServletException, IOException {
 filterChain.doFilter(new CaseInsensitiveParameterNameHttpServletRequest(request), response);
 }
 
 public static class CaseInsensitiveParameterNameHttpServletRequest extends HttpServletRequestWrapper {
 private final LinkedCaseInsensitiveMap<String[]> map = new LinkedCaseInsensitiveMap<>();
 
 public CaseInsensitiveParameterName<mark>本文来源gaodaimacom搞#^代%!码&网(</mark>HttpServletRequest(HttpServletRequest request) {
  super(request);
  map.putAll(request.getParameterMap());
 }
 
 @Override
 public String getParameter(String name) {
 
  String[] array = this.map.get(name);
  if (array != null && array.length > 0)
  return array[0];
  return null;
 }
 
 @Override
 public Map<String, String[]> getParameterMap() {
  return Collections.unmodifiableMap(this.map);
 }
 
 @Override
 public Enumeration<String> getParameterNames() {
  return Collections.enumeration(this.map.keySet());
 }
 
 @Override
 public String[] getParameterValues(String name) {
  return this.map.get(name);
 }
 
 }
 
}

并在启动类上加入@ServletComponentScan注解

补充:springboot 接受大写参数时,接收值为空的解决

入参:

{
 "title":"文章标题1",
 "content":"文章内容22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
 "DOI":"123",
 "PMID":"1234",
 "email":"[email protected]"
}

springboot 接到的DOI和PMID 为null,头字母改为小写后正常。

原因及解决

是spring 使用@requestbody 接收时遵循驼峰命名规则,如果希望接收非驼峰的参数可以在对映的属性上添加注解

@JsonProperty(value = "DOI")
private String DOI;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持搞代码。如有错误或未考虑完全的地方,望不吝赐教。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringBoot 请求参数忽略大小写的实例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址