问题
我得到了一个从 jsp 发送的多维字符串数组,当我尝试获取该数组并将其设置为 servlet 中的一个变量时,我意识到 Controller 将多维数组字符串转换为一维字符串数组,我从 jsp 的一侧在 console.log 中打印了数组,只是为了确保该数组包含字符串数组而不仅仅是字符串,chrome 的日志显示一切正常,所以我想问题一定出在小服务程序。这不是错误,但不是我期望在我的应用程序中接下来要实现的行为。
这是我遇到问题的代码:
String[] arrayCompra = request.getParameterValues("arraycompra[]");
基本上,当我将数组从请求设置为 servlet 端的数组时,servlet 正在做的事情是这样的:
String[][] array = { {"a","b","c"} , {"d","e","f"} };
进入这个:
String[] array = {"a,b,c", "d,e,f"};
此外,我搜索了一个解决方案并得到了一些答案和想法,比如添加 .clone();但它给了我同样的结果。而且我知道有一个 string.Split 方法,但我必须在数组中迭代以拆分每个字符串,然后将每个结果数组设置为字符串的多维数组,如果我能避免或解决主要问题,我发现它是不必要的.
我做错了什么?有没有办法实现我想要的?有没有更好的方法来精确复制我从 servlet 请求中获得的多维数组?
非常感谢。
解决方案 Bohemian
String[][] arrayCompra = Arrays.stream(request.getParameterValues("arraycompra[]")).map(s -> s.split(",")).toArray(String[][]::new);
顺便说一句...此解决方案的某些方法需要 JDK 8 或更高版本,而我使用的是 1.7,所以我面临...
lambda expressions are not supported in -source 1.7
(use -source 8 or higher to enable lambda expressions)
To solve this just change compiler version of your source code into your project properties to JDK 8 but first check whether you have one already installed.
最佳答案
这里不是与框架作斗争,而是将 CSV 数组转换为 2D 数组的 1-liner:
String[][] arrayCompra = Arrays.stream(request.getParameterValues("arraycompra[]"))
.map(s -> s.split(","))
.toArray(String[][]::new);
关于java - 如何避免 servlet 将多维字符串数组转换为一维字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185009/