spring mvc中如何过滤form提交数据中的空格?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring mvc中如何过滤form提交数据中的空格?相关的知识,希望对你有一定的参考价值。
项目中有很多表单,我希望去掉数据两边的空格,但不能在每个controller中都调用trim方法,如何能做到进入controller之前就进行过滤?
通常是可以获取值之后,可以通过字符串的“trim”方法直接删除开始和结尾的空格的。举例:
String name = request.getParameter (“username”).trim();
解释:其中username是form中提交过来的参数,此时如果参数中开始和结尾带有空格,会直接被删除。 参考技术A 这要看你使用什么方式提交表单数据咯。假如你使用javascript帮你提交表单的话 就可以先使用javascript处理空格了。 参考技术B 不知道时隔这么久,楼主现在的解决办法是? 参考技术C 在页面提交前处理下不就行了追问
那和在controller理处理没啥区别,我要的是只写一次,处理所有的空格。
如何在 Spring MVC 控制器中接收 multipart/form-data?
【中文标题】如何在 Spring MVC 控制器中接收 multipart/form-data?【英文标题】:How can I receive multipart/form-data in Spring MVC Controller? 【发布时间】:2020-01-08 03:49:23 【问题描述】:我需要实现一个 REST-Endpoint,它接收 multipart/form-data 我使用:
弹簧靴 科特林 弹簧 MVC包含以下部分的多部分表单提交:
部署名称 ----- text/plain 启用重复过滤 ----- 文本/纯文本 仅部署更改 ----- 文本/纯文本 部署源 ----- 文本/纯文本 租户 ID ----- 文本/纯文本 * ----- 应用程序/八位字节流
Rest Controller 看起来是这样的:
@PostMapping("/data/deployment/create")
fun uploadDmn(
@RequestParam("deployment-name")
deploymentName: String,
@RequestParam("enable-duplicate-filtering")
enableDuplicateFiltering: String?,
@RequestParam("deploy-changed-only")
deployChangedOnly: String,
@RequestParam("deployment-source")
deploymentSource: String,
@RequestParam("tenant-id")
tenantId: String,
@RequestParam("data")
data: MultipartFile
)
println(deploymentName)
println(deployChangedOnly)
println(deploymentSource)
println(tenantId)
println(data.toString())
对于所有有效的参数,但对于最后一个无效的参数。 我试图给一个不起作用的名称“数据”、“*”、“文件”。
所需的请求部分“数据”不存在
控制器看不到该文件。
我也尝试过使用 Retrofit:
@PostMapping("/data/deployment/create")
@Multipart
fun uploadDmn(
@Part("data")
data: MultipartFile
)
println(data.toString())
但这也行不通:
指定为非空的参数为空
如何使用该内容类型?多部分/表单数据
请求示例:
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="deployment-name"
aName
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="enable-duplicate-filtering"
true
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="deployment-source"
process application
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="data"; filename="test.bpmn"
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions ...>
<!-- BPMN 2.0 XML omitted -->
</bpmn2:definitions>
--28319d96a8c54b529aa9159ad75edef9--
有人可以帮忙吗?
【问题讨论】:
您是否将spring.servlet.multipart.enabled
设置为true
?
@LHCHIN 不,但我尝试在 application.properties 中这样做。还是同样的问题:Parameter specified as non-null is null
您应该在 crsf 之前添加多部分过滤器。 ***.com/a/35405063/11951081
【参考方案1】:
我猜你可以使用这样的东西:
@RequestMapping(value = "/source/upload/sourceName", method = RequestMethod.POST)
public List<String> uploadSource(@RequestParam("file") MultipartFile sourceFile,
@PathVariable("sourceName") String sourceName) throws IOException
File outputFile = new File(System.getProperty("java.io.tmpdir"), sourceFile.getOriginalFilename());
sourceFile.transferTo(outputFile);
<<your business logic>>
Files.deleteIfExists(outputFile.toPath());
return Arrays.asList(columns);
请注意,我已经在临时目录(通过代码)中创建了该文件的副本,并且正在使用该文件来实现我的业务逻辑
【讨论】:
【参考方案2】:我希望我能帮助你。试试看。
@RequestMapping(value = "/putRequest",
produces = "application/json" ,
consumes = "multipart/form-data" ,
method = RequestMethod.PUT)
public ResponseEntity<SuccessDto> requestPut(@Valid @RequestParam(value = "commit", required = false, defaultValue="false") Boolean commit, @Valid @RequestPart("file") MultipartFile file)
return new ResponseEntity<>(HttpStatus.OK);
【讨论】:
我不知道你为什么用 Swagger 注释了 90% 的代码,但这里主要是注释@RequestPart
。不幸的是,这也不起作用。同样的问题“所需的请求部分'数据'不存在”。我认为问题出在发送此请求的应用程序中。该应用程序是“Camunda Modeler”。
“我认为问题出在发送此请求的应用程序中。”我同意。上面的代码在正文中需要一个带有“file”键的 FormData 对象。当然我不知道客户以哪种形式发送他的请求。也许钥匙必须调整。
尝试用@RequestPart("data") 改变@RequestPart("file")。以上是关于spring mvc中如何过滤form提交数据中的空格?的主要内容,如果未能解决你的问题,请参考以下文章
spring-mvc 如何把页面表单提交过来的值注入到对应的实体里面