Как передать массив json в метод Angular Post и как получить этот массив в Api? - PullRequest
0 голосов
/ 22 мая 2018

Метод My Post в Angular

     private attachAuthorization(): RequestOptions {
     const headers = new Headers();
     headers.append('Content-Type', 'application/json');
headers.append('HttpHeaders.ACCEPT', 'MediaType.APPLICATION_JSON_VALUE');
headers.append('Content-Type', 'charset=UTF-8');
headers.append ('Authorization',sessionStorage.getItem('token'));
//console.log(localStorage.getItem('token'));
const options = new RequestOptions({
  headers: headers,
  responseType: ResponseContentType.Json,
});

return options;}


public post(url: string, requestData: any):any {
const options = this.attachAuthorization();
return this.http.post(url, JSON.stringify(requestData),options);


}

Json Array

[{"columnname": "symbol","filterby": "", "ценность": "", "время": "", "тип данные": "String"}, { "имя_столбец": "order_Receiving_Date", "filterby": "", "ценность":"", "время": "", "тип данные": "DateRange"}, { "имя_столбец": "EVENT_TYPE", "filterby": "", "ценность": "", "время": "",»Тип данные ":" String "}, {" имя_столбец ":" firm_ROE_ID " "filterby": "", "ценность": "", "время": "", "тип данные": "ИНТ"}, {" имя_столбец":" rejected_ROE_ID "," filterby ":" "," values ​​":" "," time ":" "," datatype ":" int "}]


Метод API

@RequestMapping(value = {"/Oats-Exception-summary"}, method = RequestMethod.POST)
 public ResponseEntity<List<OatsExceptionSummary>> OatsExceptionSummaryPost(
         @RequestBody JSONArray payload)throws SQLException,JSONException,Exception {
    System.out.println(payload);
    String FilterData="";
    /*JSONObject jsonObj=new JSONObject(payload);*/
    List<OatsExceptionSummary> Data =ISurveillanceService.getOatsExecptionSummary(FilterData);  
     if (Data.isEmpty()) {
            return new ResponseEntity<List<OatsExceptionSummary>>(HttpStatus.NO_CONTENT);
        } else {
            return new ResponseEntity<List<OatsExceptionSummary>>(Data, HttpStatus.OK);
        }
 }

** Ошибка в API **

Не удалось прочитать сообщение HTTP: org.springframework.http.converter.HttpMessageNotReadableException: Обязательное тело запросаотсутствует: public org.springframework.http.ResponseEntity> com.zcon.RSMS.SpringBoot_RSMS2.controller.SurveillanceController.OatsExceptionSummaryPost (org.json.JSONArray) выдает java.sql.SQLException, исключение или исключение.jgn 2018-05-22 12: 56: 09.624 WARN 11855 --- [nio-8090-exec-4] .wsmsDefaultHandlerExceptionResolver: Устраненное исключение, вызванное выполнением обработчика: org.springframework.http.converter.HttpMessageNotReadableException: отсутствует обязательное тело запроса: public org.springframework.http.ResponseEntity> com.zcon.RSMS.SpringBoot_RSMS2.controller.SurveillanceController.OatsExceptionSummaryPost (org.json.JSONArray) выдает исключение java.sql.SQLException, org.j.*

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Вы структурируете тело сообщения, в то время как ваш API ожидает массив JSON.Просто удалите JSON.stringify и попробуйте снова.

return this.http.post(url, requestData, options);
0 голосов
/ 22 мая 2018

Решено .. Проблема в том, что я отправил пустой массив reauestData [], но теперь я изменил массив на объект json

{

"data": [

{"columnname": "symbol", "filterby": "", "values": "", "time": "", "datatype": "String"}, {"columnname":"order_Receiving_Date", "filterby": "", "ценности": "", "время": "", "тип данных": "DateRange"}, { "имя_столбца": "EVENT_TYPE", "filterby": "","ценности": "", "время": "", "Тип данных": "String"}, { "имя_столбца": "firm_ROE_ID", "filterby": "", "ценности": "", "время":"", "тип данных": "Int"}, { "имя_столбца": "rejected_ROE_ID", "filterby": "", "ценности": "", "время": "", "тип данных": "Int"}

]

}


Метод отправки

component.ts

prepareData() {


console.log("this.FilterData"+JSON.stringify(this.FilterData)); 
  this.loading = true;
   this.SharedHttpClientService.post(
    this.UrlsService.setAPIURl(
      APIURL.Surveillance_OatsException_Summary),
      this.FilterData)
    .map((response: Response) => {
      this.isLoadingResults = false;
      this.isRateLimitReached = false;
      return response.json();
    })
    .subscribe(Element => {
      this.dataset=Element;
    },
      (err: HttpErrorResponse) => {
        this.isLoadingResults = false;
        this.isRateLimitReached = true;
    });
    this.loading = false;


}

service.ts

 private attachAuthorization(): RequestOptions {
const headers = new Headers();
headers.append('Content-Type', 'application/json');
//headers.append('HttpHeaders.ACCEPT', 'MediaType.APPLICATION_JSON_VALUE');
headers.append ('Authorization',sessionStorage.getItem('token'));
//console.log(localStorage.getItem('token'));

const options = new RequestOptions({
  headers: headers,
  responseType: ResponseContentType.Json,

});

return options;
  }



public post(url: string, requestData: any):Observable<any>{
const options = this.attachAuthorization();
//console.log(localStorage.getItem('token'));
let Data={"data":requestData}
console.log("Data "+JSON.stringify(Data)); 
return this.http.post(url,JSON.stringify(Data),options);                                                                                                        


 }

API-контроллер Функция

   @RequestMapping(value = {"/Oats-Exception-summary/"}, method = RequestMethod.POST)
     public ResponseEntity<List<OatsExceptionSummary>> OatsExceptionSummaryPost(
             @RequestBody Map payload)throws SQLException,JSONException,Exception {
        JSONObject root = new JSONObject( payload);
        JSONArray dataArray = root.getJSONArray("data");
        for (int t=0; t<dataArray.length(); t++) {
            JSONObject JObject = dataArray.getJSONObject(t);
            System.out.println(JObject.getString("columnname"));
        }

        String FilterData="";
        //JSONObject jsonObj=new JSONObject(payload);
        List<OatsExceptionSummary> Data =ISurveillanceService.getOatsExecptionSummary(FilterData);  
         if (Data.isEmpty()) {
                return new ResponseEntity<List<OatsExceptionSummary>>(HttpStatus.NO_CONTENT);
            } else {
                return new ResponseEntity<List<OatsExceptionSummary>>(Data, HttpStatus.OK);
            }
     }
0 голосов
/ 22 мая 2018
//fist convert your json array into typescript

  //  than assin to any variable like
   documents: [{
           columnname: string;
           filterby: string;
           values: string;
           time: string;
           datatype: string;
        }];
 //than pass to in service like below
this.profileService.saveProfile(this.documents)
            .subscribe(response => { });
   //than use in your http post service like below example
 saveProfile(formData): Observable<any> {

                    return this.http.post(this.requestUrl, formData)
                      .map((res: Response) => {return res.json()})
                      .catch(this.handleError);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...