如何通过 HttpServletRequest 发送数组

Posted

技术标签:

【中文标题】如何通过 HttpServletRequest 发送数组【英文标题】:How to send an array through an HttpServletRequest 【发布时间】:2022-01-15 04:26:56 【问题描述】:

我目前正试图弄清楚如何在 Java 上使用我在使用 javascript 的 JSP 上生成的二维数组。问题是,当我将它分配给隐藏在表单上的现有属性以便通过请求发送时,它会生成一个包含所有值的完整字符串,如下所示:

function saveArray() 

    var array= frames['myFrame'].array;

    //this comes from a child frame and its perfectly ok, works 
    //fine on a 2 dimension array

    document.forms[0].arrayHiddenProperty.value = array;
 

如何将 html 表单上的字段设置为数组(我认为可能),或者将完整数组发送到我的 Java 后端?项目正在使用 Struts,所以这是一个 Action 类。谢谢各位。

【问题讨论】:

将数组转换为 JSON(即JSON.stringify(array))并将其发送到后端。 HTTP 只能移动文本。 什么版本的 Struts? 【参考方案1】:

Formdata 只接受字符串类型,因此当类型不是字符串时会自动转换为字符串类型,但是您可以在表单数据上多次附加一个键来创建一个结构将被解释为一个数组服务器端。

// client side ---------------------------------------------
const formData = new FormData();
formData.append('key_name', 'value_1');
formData.append('key_name', 'value_2');
formData.append('key_name', 'value_3');
formData.append('key_name', 'value_4');

const request = new XMLHttpRequest();
request.open("POST", "request_url");
request.send(formData);

// server side ----------------------------------------------
// into the request you find an array if you search into 
// POST['key_name'] because the key is repeated and all the 
// elements will be grouped into an array

除了使用原生对象“formdata”的方法外,还可以通过JSON请求发送复杂的结构,如下所示。

const sampleArray = [ 'banana', 'orange', 'pear' ];
const sampleJson = 
  'other_data_key': 'other_data_value',
  'array_of_values': sampleArray

const sampleJsonStringified = JSON.stringify(sampleJson);

const request = new XMLHttpRequest();
request.open("POST", "request_url");
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
request.send(sampleJsonStringified);

【讨论】:

以上是关于如何通过 HttpServletRequest 发送数组的主要内容,如果未能解决你的问题,请参考以下文章

过滤器和监听器

通过HttpServletRequest转换获得json对象

如何在一个类中获取HttpServletRequest 对象

如何获取httpservletrequest

如何获取IE发出的HTTP请求头

如何从HttpServletRequest request里面获取客户端提交的post内容