根据this answer我尝试编写代码:
POJO:
class MyBean{
public String getValueName() {
return valueName;
}
public void setValueName(String valueName) {
this.valueName = valueName;
}
String valueName;
}
控制器内部:
@ModelAttribute
public MyBean createMyBean() {
return new MyBean();
}
@RequestMapping(value = "/getMyBean", method = RequestMethod.GET)
public String getMyBean(@ModelAttribute MyBean myBean) {
System.out.println(myBean.getValueName());
return "pathToJsp";
}
web.xml配置:
<filter>
<filter-name>caseInsensitiveFilter</filter-name>
<filter-class>com.terminal.interceptor.CaseInsensitiveRequestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>caseInsensitiveFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器:
@Component
public class CaseInsensitiveRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
filterChain.doFilter(new CaseInsensitiveHttpServletRequestWrapper(request), response);
}
private static class CaseInsensitiveHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final LinkedCaseInsensitiveMap params = new LinkedCaseInsensitiveMap();
/**
* Constructs a request object wrapping the given request.
*
* @param request
* @throws IllegalArgumentException if the request is null
*/
private CaseInsensitiveHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
params.putAll(request.getParameterMap());
}
@Override
public String getParameter(String name) {
String[] values = getParameterValues(name);
if (values == null || values.length == 0) {
return null;
}
return values[0];
}
@Override
public Map getParameterMap() {
return Collections.unmodifiableMap(this.params);
}
@Override
public Enumeration getParameterNames() {
return Collections.enumeration(this.params.keySet());
}
@Override
public String[] getParameterValues(String name) {
return (String[]) params.get(name);
}
}
}
在调试中我看到调用过滤器方法但我无法实现case insentive get parameters mapping。
例如localhost:8081/getMyBean?valueName=trololo
有效但localhost:8081/getMyBean?valuename=trololo
- 不是
答案 0 :(得分:4)
我相信你的问题是public static void main (String[]args)
{
ArrayList<Integer> answers = new ArrayList<Integer>();
int temp = 0;
int result = 0;
for (int i = 100; i <= 999; i++){
for (int z = 100; z <= 999; z++){
int prod = i * z;
result = pal(prod);
answers.add(result);
}
}
int answer = Collections.max(answers);
System.out.println(answer);
}
public static int pal(int n){
int palindrome; //You could place it here.
String temp2 = String.valueOf(n);
for (int i = 0; i < temp2.length()/2; i++){
if (temp2.charAt(i) != temp2.charAt(temp2.length()-1-i)) {
palindrome = Integer.parseInt(temp2);
return palindrome;
}
}
return palindrome;
}
}
。您要求Spring将参数映射到@ModelAttribute
对象,并且此对象内的属性为MyBean
。
为了让Spring将params反映到对象中,它需要处于正确的情况。
您有两个选择:
valueName
,将所有属性名称更改为小写,它应该在您的解决方案的帮助下工作。valuename
并为每个属性添加@ModelAttribute
。如果你有很多道具,这可能会很痛苦。答案 1 :(得分:1)
实际上,您必须根据bean变量名更改CaseInsensitiveRequestFilter
类中的内容。在您的情况下,变量是valueName
,因此对于每个请求,它将根据您的变量setter方法驼峰案例注入转换它,然后根据您的请求进行匹配。只需尝试自定义要求:
package biz.deinum.web.filter;
import java.io.IOException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.web.filter.OncePerRequestFilter;
public class CaseInsensitiveRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
filterChain.doFilter(new CaseInsensitiveHttpServletRequestWrapper(request), response);
}
private static class CaseInsensitiveHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final LinkedCaseInsensitiveMap<String[]> params = new LinkedCaseInsensitiveMap<>();
private CaseInsensitiveHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
Map<String, String[]> map = request.getParameterMap();
Set set = map.entrySet();
Iterator it = set.iterator();
Map<String, String[]> tempMap = new HashMap<String, String[]>();
while (it.hasNext()) {
Map.Entry<String, String[]> entry = (Entry<String, String[]>) it.next();
String key = entry.getKey();
// Keep your parameter bean name here in your case it is "valueName"
String beanParamaterName = "valueName";
if(key.equalsIgnoreCase(beanParamaterName)){
tempMap.put(key.toLowerCase(), entry.getValue());
}
}
params.putAll(tempMap);
}
@Override
public String getParameter(String name) {
String[] values = getParameterValues(name);
System.out.println(values.toString()+"-");
if (values == null || values.length == 0) {
return null;
}
return values[0];
}
@Override
public Map<String, String[]> getParameterMap() {
return Collections.unmodifiableMap(this.params);
}
@Override
public Enumeration<String> getParameterNames() {
return Collections.enumeration(this.params.keySet());
}
@Override
public String[] getParameterValues(String name) {
System.out.println(name);
return (String[])params.get(name);
}
}
}