ionic3 - Ionic HttpClient:JSONObject 文本必须以 '{' 在 1 [字符 2 第 1 行] 开头
问题描述
我有一个 Java REST API,org.json
我有一个方法putJson()
可以解析传入的 JSON 数据并将其保存到数据库表中。
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import org.json.JSONArray;
import org.json.JSONObject;
@Path("consumptions")
public class ConsumptionsResource extends Database {
@Context
private UriInfo context;
public ConsumptionsResource() {
this.openConnection();
}
@PUT
@Path("{id}")
@Consumes(MediaType.APPLICATION_JSON)
public boolean putJson(@PathParam("id") String id, String content) {
boolean ok = true;
JSONObject json = new JSONObject(content);
String date = json.getString("pvm");
String time = json.getString("klo");
String consumption = json.getString("kulutus");
try {
String sql = "UPDATE kulutus SET pvm = ?, klo = ?, kulutus = ? WHERE id = ?";
this.preparedstatement = yhteys.prepareStatement(sql);
this.preparedstatement.setString(1, pvm);
this.preparedstatement.setString(2, klo);
this.preparedstatement.setString(3, kulutus);
this.preparedstatement.setString(4, String.valueOf(id));
this.preparedstatement.execute();
this.closeConnection();
} catch (Exception e) {
e.printStackTrace();
ok = false;
}
return ok;
}
}
我还有一个 Ionic 3 应用程序,它使用 PUT 方法和 JSON 数据连接到这个 API。计数器.ts:
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { KulutusProvider } from '../../providers/consumption/consumption';
import { consumption } from '../../app/consumption.interface';
@IonicPage()
@Component({
selector: 'page-counter',
templateUrl: 'counter.html',
})
export class CounterPage {
date: string = new Date().toLocaleDateString();
last_smoked: string;
counter: number = 0;
data = {} as consumption;
constructor(public navCtrl: NavController,
public navParams: NavParams,
public kulutusProvider: KulutusProvider
) {
}
ionViewDidLoad() {
let current_day = this.yyyy_mm_dd();
this.consumptionProvider.getConsumption(current_day).then((data) => {
this.data = data[0];
}, (error) => {
this.data = error;
});
}
addOne = () :void => {
this.data.consumption += 1;
this.consumptionProvider.setConsumption(this.data).then((value) => {
console.log(value);
});
}
yyyy_mm_dd = () :string => {
let year = new Date().getFullYear();
let month = `0${new Date().getMonth()+1}`;
let day = new Date().getDate();
return `${year}-${month}-${day}`;
}
}
这是提供者的consumer.ts:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
import { pack } from '../../app/aski.interface';
import { consumption } from '../../app/kulutus.interface';
@Injectable()
export class ConsumptionProvider {
constructor(public http: HttpClient, public storage: Storage) { }
setPack(pack: pack) {
this.storage.set("pack_info", pack);
}
getConsumption(date: string) {
return new Promise((resolve, reject) => {
this.http.get(`http://localhost:8080/savukelaskuri/webresources/consumptions/${pvm}`)
.subscribe((data) => {
resolve(data);
}, (error) => {
reject(error);
})
})
}
setConsumption(data: consumption) {
return new Promise((resolve, reject) => {
this.http.put(`http://localhost:8080/savukelaskuri/webresources/kulutukset/${data.date}`, data[0])
.subscribe((data) => {
resolve(data);
}, (error) => {
reject(error);
});
})
}
}
我期望能够解析 JSON 数据,然后将其保存到数据库,但我收到了这个错误org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
。
解决方案
setConsumption()
需要data
与 PUT 主体一样,而不是data[0]
.
setConsumption(data: consumption) {
return new Promise((resolve, reject) => {
this.http.put(`http://localhost:8080/savukelaskuri/webresources/kulutukset/${data.date}`, data)
.subscribe((data) => {
resolve(data);
}, (error) => {
reject(error);
});
})
}
在ConsummptionResource
putJson() 类上,而不是字符串类型
String consumption = json.getString("kulutus");
consumption
必须是整数
int consumption = json.getint("kulutus");
推荐阅读
- python - 在处理上述异常的过程中,使用SHAP解释keras神经网络模型时出现了另一个异常
- javascript - 将颜色通道字节打包成有符号整数并正确显示为十六进制
- c# - 将数据添加到 json 而不是覆盖它 C#
- javascript - 我的滚动显示对 java 脚本的影响不起作用如何修复它?
- react-native - animated.event 似乎没有更新 Animated.Value
- firebase - 如何在模拟器上以调试模式使 Flutter 应用程序崩溃?
- visual-studio - 无法从 NuGet 包打开 microsoft.ai.machinelearning.h
- angular - Angular FormControl Jest 测试导致 TypeError:将循环结构转换为 JSON
- java - 无法检索在哈希图中添加的值
- html - 如何垂直对齐显示 N 个相同大小的内联块元素?