我在Sping Boot 中设计了一个REST端点,使用Tomcat作为嵌入式服务器,它带有一个查询参数。
1.当我将查询参数作为param1%uFF07传递时,tomcat在内部将参数读取为null
1.当我把查询参数作为param1%FF07传递时,tomcat读取为某个字符。
tomcat只读取后跟两个十六进制数字的“%”字符,如果u放在“%”字符之后tomcat解析参数为null
,并带有消息
字符解码失败。值为[param1%uFF07]的参数[name]已被忽略。请注意,由于解码失败,此处引用的名称和值可能已损坏。请使用调试级别日志记录查看原始的未损坏的值。注意:以后出现的参数错误将在调试级别记录。
下面是Sping Boot 控制器代码
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", required = false) String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
字符串
2条答案
按热度按时间wqnecbli1#
你在你的url中传递
%
符号,但是%
是url中的符号,要传递%
,你必须传递%25
,然后它会像你预期的那样工作。所以,如果你传递
%25uFF07
,那么它将显示%uFF07
作为值。不需要在application.properties或任何类型的设置中更改任何内容。我已经在我的项目中测试过了。
请随时要求任何澄清。希望它有帮助。
6jjcrrmo2#
我发现了一种使用过滤器的方法。关于过滤器的基本知识可以在here上找到。我们可以在那里拦截请求查询字符串,并使用Tomcat UDecoder类解析查询字符串,如果抛出任何异常,我们可以显示400的响应
字符串