javascript - 将从 Javascript 发送的列表映射到 Java 后端
问题描述
我正在尝试将 json 对象列表从 Javascript 发送到 Spring Boot 后端。这就是我的函数在前端的样子:
function submit() {
var toSend = JSON.stringify(toBeAdded);
console.log(toSend);
$.post("assets",
toSend,
data => {
populate(data);
toBeAdded = [];
});
}
所以我发送一个类似的列表: [{"name":"foo1","description":"bar1","value":"4"}, {"name":"foo2","description":"bar2" "值":"10"}]
但我无法在后端捕捉到它:
@RequestMapping(value = "/assets", method = RequestMethod.POST)
public void insertAssets(List<AssetDto> data, HttpSession session) {
System.out.println(data);
}
AssetDto 看起来像:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AssetDto implements Serializable {
private String name;
private String description;
private int value;
}
所以在这种情况下我有一个错误(没有找到接口 java.util.List 的主要或单个公共构造函数 - 也没有找到默认构造函数)。但是我也尝试了一个字符串(我得到了空值),而使用 JSONArray 我得到了一个空列表。有人可以帮我吗?
解决方案
在请求中添加 Content-Type: application/json
标头以提及您发送 JSON 数据。您应该使用$.ajax
函数,因为$.post
不允许添加标题。
function submit() {
var toSend = JSON.stringify(toBeAdded);
console.log(toSend);
$.ajax({
url: 'assets',
type: 'post',
data: toSent,
contentType: "application/json; charset=utf-8",
success: function (data){
populate(data);
toBeAdded = [];
}
});
}
在服务器端使用@RequestBody
参数之前的注释。
@RequestMapping(value = "/assets", method = RequestMethod.POST)
public void insertAssets(@RequestBody List<AssetDto> data, HttpSession session) {
System.out.println(data);
}
推荐阅读
- javascript - 当用户缩小页面时如何使元素缩小?
- javascript - JavaScript convert Array of Array of Objects into Array of objects
- javascript - IE11 在 WEBPACK VAR INJECTION 中的 vendor.js 上抛出预期的标识符 SCRIPT1010
- authorize.net - 如何在使用 Authorize.Net API getCustomerProfileRequest 时以纯文本形式获取信用卡详细信息?
- java - 调用具有一个可选参数的方法
- javascript - 从 v3 转换到 v4 时缺少轴标签
- php - 无法获取数据
- mysql - MYSQL 从所有行完全符合给定条件的行集中返回“CombinationID”
- php - 使用自定义文件名在 WordPress 中上传文件
- json - 使用 Codable 协议解析包含日期作为键的 Stock API