当前位置: 首页 > 面试题库 >

Spring Boot:防止对@RequestParam进行解码

鞠子轩
2023-03-14
问题内容

我有一个在Tomcat 8.5上运行的Spring-Boot(1.5.3)应用程序。在其中,我有一个带有单个参数的RestController。

此参数会自动解码-
这对于我的应用程序中的所有其他控制器都很好,但是对此,我需要原始请求数据,因为它们将在另一个请求中使用。请注意,我只想对此控制器/请求禁用自动解码,并在其他地方保持正常行为。

@RestController
@RequestMapping("/rest/test")
public class TestController {

  @RequestMapping("/test")
  public ResponseEntity<String> test(@RequestParam final String test){
    return ResponseEntity.ok("Requested: " + test);
  }
}

现在,如果我发送访问

curl localhost/rest/test/test?test=%C3%B6%20%C3%A4

我收到输出:

Requested: ö ä

我想拥有

Requested: %C3%B6%20%C3%A4

有任何想法吗?


问题答案:

如果仅在单个位置需要此行为,则可以使用控制器主体内部的标准Java
URLEncoder将参数编码回原始形式:

@RequestMapping("/test")
public ResponseEntity<String> test(@RequestParam final String test) {
  String encodedParam = URLEncoder.encode(test, "UTF-8");
  return ResponseEntity.ok("Requested: " + encodedParam);
}


 类似资料:
  • 我们的代码使用Asyncresttemplate如下所示

  • 问题内容: 每次使用时,我都会按字母顺序对JSON键进行排序。我不希望按键排序。我可以禁用在中进行的排序吗? 问题答案: 是的,您可以使用以下属性对此进行修改: 但是,请注意,在文档中明确警告不要这样做: 默认情况下,Flask将以对密钥进行排序的方式序列化JSON对象。这样做是为了确保独立于字典的哈希种子,返回值将保持一致,以免浪费外部HTTP缓存。您可以通过更改此变量来覆盖默认行为。不建议这样

  • 问题内容: 我有一个需要大量内存的程序,例如所有物理内存的2/3。运行一段时间后,我的操作系统开始将程序交换为hdd。但是我需要程序始终保持非常快的响应,因此我需要防止对该进程进行分页。 如何防止操作系统交换一个进程? 谢谢你的帮助! 问题答案: 在程序开始时,调用: (如果您没有该程序的源代码,则必须使用该程序来减少进程的消耗)。 请注意,这将增加进程失败进行内存分配的机会。

  • 我想为我的数据制作一个交叉表模板。对于每个值,都有一个时间戳、一个位置和我从中获取值的设备的名称。因此,我通过Java给出了一个值列表和一个JRBeanCollectionDataSource到我的报告中,对于下面的示例,这将是9个值,而每个值都有3个额外的参数将其放置在交叉表的右侧列/位置。当我给Jasper报告一个交叉表(交叉表是需要的,因为我不知道我的报告将有多少行和列)的数据时,Jaspe

  • 是否有一种方法可以防止对已经被混淆的JavaScript代码进行去混淆。 模糊的JS: VAR_0xB5AE=[“\X73\X68\X6F\X77”,“\X2E\X6C\X6F\X61\X64\X65\X72”,“\X6D\X6F\X75\X73\X6D\X6F\X76\X65”,“\X2E\X62\X6C\X6F\X6F\X6B\X6B”];$(_0xB5AE[3])[_0xB5AE[2]](f

  • 问题内容: 我正在尝试通过GET请求中的URL参数传递API密钥。 但是,我注意到在发送请求时,Axios会在我的API密钥中对字符进行编码。这会导致API拒绝我的请求,因为它无法识别我的密钥。 如何防止Axios对我的GET参数进行编码? 问题答案: 您可以使用自定义参数序列化器,如下所示: 可以在实例级别设置: 或在全球范围内: 另一个选择是将api键直接添加到URL: 您可以使用`param

  • 问题内容: 是否有可能以与PHP具有防止它们攻击的Prepared语句相同的方式来防止在Node.js(最好是使用模块)中进行SQL注入。 如果是这样,怎么办?如果没有, 那么有哪些示例 可以绕过我提供的代码(请参见下文)。 一些上下文: 我正在使用node-mysql模块制作一个包含Node.js+MySql的后端堆栈的Web应用程序。从可用性的角度来看,该模块很棒,但是它还没有实现类似于PHP

  • 问题内容: 我增加了一个,这似乎为。在关闭之前,我想验证的输入。基于验证,我想关闭还是不关闭。但是我不知道如何防止按下按钮时的关闭动作。有没有人解决了这个问题或从哪里开始的任何想法?我去了谷歌,但没有运气:/谢谢! 问题答案: 您是正确的:如果用户可以点击警报中的按钮,则警报将被关闭。因此,您要防止用户点击按钮!只需禁用UIAlertAction按钮即可。如果禁用了警报操作,则用户无法点击它以将其