是否可以使用 $http.post 来 post 一个数组?
Is it possible to post an array with $http.post?
我正在尝试通过 $http.post 保存 json 数组以在 back-end 中提供服务,但我总是得到 400 Bad Request
。我用谷歌搜索了一下,没有找到明确的答案。
我的问题如下:
1. 是否可以通过 $http.post?
post json 数组
2.如果有,是怎么做到的?
3. 如果没有,还有什么其他选择可以保存 json 数组?
为了使这一点更加清楚,我将在下面添加一些必要的代码。
在Front-end
储蓄服务
createBatchSavings: function(savingsBatch){
return $http.post('/finance/savings/create/batchsavings', savingsBatch).success(function(data){
return data;
});
}
以上函数正确获取了它的 savingsBatch 参数。 savingsBatch 是 json 数组。
在Back-end
SavingServiceImpl
@Component
@Path("/savings")
@Produces("application/json")
public class SavingsServiceImpl implements SavingsService {
@Autowired
FinanceEntityDao financeDao;
@POST
@Path("/create")
public FinanceEntity createSaving(FinanceEntity financeEntity) {
financeEntity.setType(FinanceType.SAVING);
financeEntity.setDateAdded(new Date());
return financeDao.save(financeEntity);
}
@POST
@Path("/create/batchsavings")
public List<FinanceEntity> createBatchSavings(List<FinanceEntity> savingsBatch) {
if(savingsBatch.size() > 0){
return financeDao.massSave(savingsBatch);
}
else {
throw new NullPointerException("Saving batch was null!");
}
}
}
我还检查了 header 值。请求 headers 具有正确的值,但响应 headers content-length 始终为零。
是的,它绝对有可能 post 数组数据,并且您在客户端为 post 数据编写的代码是正确的。
您收到的状态代码 400
一定是由于您的服务器端代码出现问题。我在您的服务器端代码中看到一个方法 createBatchSavings 但您在客户端的 URL 是小写的,batchsavings.
这只是一个提示。您需要添加有关服务器端代码的更多信息。
问题如下:
- 是否可以通过 $http.post post json 数组? 是
如果有,是怎么做到的?
$http({ 方法:'POST', url:'api/data', data:item 数组})
如果没有,还有什么其他选择可以保存 json 数组?
有可能。
这个问题终于解决了。这个实现有两个问题。 front-end 中的第一个和 back-end 中的第二个。
Front-end
第一个问题是我试图将 post json 数组直接转换为 Java 服务 class,但这行不通,因为它必须转换成正确的字符串 json 数组。将 json 数组从控制器发送到服务的代码如下所示:
$scope.createBatchSavings = function(batchSavings){
return SavingsService.createBatchSavings(batchSavings).success(function(data){
swal("Saving batch saved!", "Saving batch was saved successfully!", "success");
$scope.savingsBatch = [];
});
}
此处 batchSavings 是 json 数组,header 中的 content-type 是 application/json。这必须被字符串化,因此上面的方法必须像下面这样写,以便将正确的 json 数组传递给 back-end 服务:
$scope.createBatchSavings = function(batchSavings){
return SavingsService.createBatchSavings(JSON.stringify(batchSavings)).success(function(data){
swal("Saving batch saved!", "Saving batch was saved successfully!", "success");
$scope.savingsBatch = [];
});
}
Back-end
其次,这个字符串化数组必须在 back-end 中反序列化。以前 front-end 服务和 back-end 服务之间的连接甚至因为传递了不合适的 json 数组而无法正常工作。因此,通过将 json 数组转换为正确的数组来修复连接。
为了让 back-end 服务正常工作,我必须将参数类型从 List<FinanceEntity>
更改为 String
。我还必须选择反序列化 "machine"。就我而言,我选择了 Gson。因此下面的方法:
@POST
@Path("/create/batchsavings")
public List<FinanceEntity> createBatchSavings(List<FinanceEntity> savingsBatch) {
if(savingsBatch.size() > 0){
return financeDao.massSave(savingsBatch);
}
else {
throw new NullPointerException("Saving batch was null!");
}
}
变成:
@POST
@Path("/create/batchsavings")
public List<FinanceEntity> createBatchSavings(String savingsBatch) {
Gson gson = new Gson();
Type collectionType = new TypeToken<List<FinanceEntity>>(){}.getType();
List<FinanceEntity> savingsList = gson.fromJson(savingsBatch, collectionType);
if(savingsList.size() > 0){
return financeDao.massSave(savingsList);
}
else {
throw new NullPointerException("Saving batch was null!");
}
}
现在这一切都有效了。
作为通知,如果您有任何日期,您必须将它们格式化为正确的格式,否则您将在 Java.
中遇到 Unparsable date
问题
我正在尝试通过 $http.post 保存 json 数组以在 back-end 中提供服务,但我总是得到 400 Bad Request
。我用谷歌搜索了一下,没有找到明确的答案。
我的问题如下:
1. 是否可以通过 $http.post?
post json 数组
2.如果有,是怎么做到的?
3. 如果没有,还有什么其他选择可以保存 json 数组?
为了使这一点更加清楚,我将在下面添加一些必要的代码。
在Front-end
储蓄服务
createBatchSavings: function(savingsBatch){
return $http.post('/finance/savings/create/batchsavings', savingsBatch).success(function(data){
return data;
});
}
以上函数正确获取了它的 savingsBatch 参数。 savingsBatch 是 json 数组。
在Back-end
SavingServiceImpl
@Component
@Path("/savings")
@Produces("application/json")
public class SavingsServiceImpl implements SavingsService {
@Autowired
FinanceEntityDao financeDao;
@POST
@Path("/create")
public FinanceEntity createSaving(FinanceEntity financeEntity) {
financeEntity.setType(FinanceType.SAVING);
financeEntity.setDateAdded(new Date());
return financeDao.save(financeEntity);
}
@POST
@Path("/create/batchsavings")
public List<FinanceEntity> createBatchSavings(List<FinanceEntity> savingsBatch) {
if(savingsBatch.size() > 0){
return financeDao.massSave(savingsBatch);
}
else {
throw new NullPointerException("Saving batch was null!");
}
}
}
我还检查了 header 值。请求 headers 具有正确的值,但响应 headers content-length 始终为零。
是的,它绝对有可能 post 数组数据,并且您在客户端为 post 数据编写的代码是正确的。
您收到的状态代码 400
一定是由于您的服务器端代码出现问题。我在您的服务器端代码中看到一个方法 createBatchSavings 但您在客户端的 URL 是小写的,batchsavings.
这只是一个提示。您需要添加有关服务器端代码的更多信息。
问题如下:
- 是否可以通过 $http.post post json 数组? 是
如果有,是怎么做到的?
$http({ 方法:'POST', url:'api/data', data:item 数组})
如果没有,还有什么其他选择可以保存 json 数组?
有可能。
这个问题终于解决了。这个实现有两个问题。 front-end 中的第一个和 back-end 中的第二个。
Front-end
第一个问题是我试图将 post json 数组直接转换为 Java 服务 class,但这行不通,因为它必须转换成正确的字符串 json 数组。将 json 数组从控制器发送到服务的代码如下所示:
$scope.createBatchSavings = function(batchSavings){
return SavingsService.createBatchSavings(batchSavings).success(function(data){
swal("Saving batch saved!", "Saving batch was saved successfully!", "success");
$scope.savingsBatch = [];
});
}
此处 batchSavings 是 json 数组,header 中的 content-type 是 application/json。这必须被字符串化,因此上面的方法必须像下面这样写,以便将正确的 json 数组传递给 back-end 服务:
$scope.createBatchSavings = function(batchSavings){
return SavingsService.createBatchSavings(JSON.stringify(batchSavings)).success(function(data){
swal("Saving batch saved!", "Saving batch was saved successfully!", "success");
$scope.savingsBatch = [];
});
}
Back-end
其次,这个字符串化数组必须在 back-end 中反序列化。以前 front-end 服务和 back-end 服务之间的连接甚至因为传递了不合适的 json 数组而无法正常工作。因此,通过将 json 数组转换为正确的数组来修复连接。
为了让 back-end 服务正常工作,我必须将参数类型从 List<FinanceEntity>
更改为 String
。我还必须选择反序列化 "machine"。就我而言,我选择了 Gson。因此下面的方法:
@POST
@Path("/create/batchsavings")
public List<FinanceEntity> createBatchSavings(List<FinanceEntity> savingsBatch) {
if(savingsBatch.size() > 0){
return financeDao.massSave(savingsBatch);
}
else {
throw new NullPointerException("Saving batch was null!");
}
}
变成:
@POST
@Path("/create/batchsavings")
public List<FinanceEntity> createBatchSavings(String savingsBatch) {
Gson gson = new Gson();
Type collectionType = new TypeToken<List<FinanceEntity>>(){}.getType();
List<FinanceEntity> savingsList = gson.fromJson(savingsBatch, collectionType);
if(savingsList.size() > 0){
return financeDao.massSave(savingsList);
}
else {
throw new NullPointerException("Saving batch was null!");
}
}
现在这一切都有效了。
作为通知,如果您有任何日期,您必须将它们格式化为正确的格式,否则您将在 Java.
中遇到Unparsable date
问题