首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离子HttpClient: JSONObject文本必须以{1开头[字符2行1]

离子HttpClient: JSONObject文本必须以{1开头[字符2行1]
EN

Stack Overflow用户
提问于 2019-01-18 11:25:19
回答 1查看 230关注 0票数 0

我有一个使用org.json的Java,其中我有一个解析传入JSON数据并将其保存到数据库表中的方法putJson()

代码语言:javascript
复制
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。counter.ts:

代码语言:javascript
复制
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}`;
  }

}

以下是提供程序consumption.ts:

代码语言:javascript
复制
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]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-18 19:12:33

setConsumption()需要只有data作为PUT主体,而不是data[0]

代码语言:javascript
复制
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()上,而不是具有类型字符串

代码语言:javascript
复制
String consumption = json.getString("kulutus");

consumption需要是一个整数

代码语言:javascript
复制
int consumption = json.getint("kulutus");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54252998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档