首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数据发布到api时解析Json异常

将数据发布到api时解析Json异常
EN

Stack Overflow用户
提问于 2021-11-01 09:38:37
回答 2查看 62关注 0票数 0

大家好,我正在尝试从相关表格中保存一些帖子数据。城市和大厅。这是我的城市模型

代码语言:javascript
运行
复制
package com.example.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "cities")

public class Cities {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;

@Column(name = "name")
private String name;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}



}

这是我的Halls模型:

代码语言:javascript
运行
复制
package com.example.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.util.Date;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@Entity
@Table(name = "halls")

public class Halls {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

     @Column(name = "name")
     private String name;

     @Column(name = "placeqty")
     private int placeqty;
      
     @JsonIgnoreProperties({"hibernateLazyInitializer", "handler","ignoreUnknown = true"})
    
     @ManyToOne(fetch = FetchType.LAZY, optional = false)
        @JoinColumn(name = "cityid", nullable = false)
        @OnDelete(action = OnDeleteAction.CASCADE)
        private Cities cityid;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPlaceqty() {
        return placeqty;
    }

    public void setPlaceqty(int placeqty) {
        this.placeqty = placeqty;
    }

    public Cities getCityid() {
        return cityid;
    }

    public void setCityid(Cities cityid) {
        this.cityid = cityid;
    }
     
     
}

它在列cityid上与城市模型相关。下面是我的控制器方法,用来在Spring boot中创建一个新的大厅:

代码语言:javascript
运行
复制
@RequestMapping(value="/add", method=RequestMethod.POST)
        public ResponseEntity add(@RequestBody Halls hall)
        {
         hallsService.addHall(hall);
          return new ResponseEntity<>(hall, HttpStatus.CREATED);

        }

和我的棱角形状:

代码语言:javascript
运行
复制
<p>Добавить зал</p>
<div>
  <div class="submit-form">
    <div *ngIf="!submitted">
      <div class="form-group">
        <label for="title">Название</label>
        <input
          type="text"
          class="form-control"
          id="title"
          required
          [(ngModel)]="hall.name"
          name="name"
        />
      </div>


      <div class="form-group">
        <label for="placeqty">кол-во мест</label>
        <input
          type="text"
          class="form-control"
          id="placeqty"
          required
          [(ngModel)]="hall.placeqty"
          name="placeqty"
        />
      </div>

      <select  [(ngModel)]="hall.cityid" name="cityid">
        <option *ngFor="let c of cities" value="{{c.id}}">{{c.name}}</option>
      </select>`


      <button (click)="saveHall()" class="btn btn-success">Сохранить</button>
    </div>

    <div *ngIf="submitted">
      <h4>Зал добавлен!</h4>
      <button class="btn btn-success" (click)="newHall()">Добавить еще</button>
    </div>
  </div>
</div>

我的组件看起来像这样:

代码语言:javascript
运行
复制
import { Component, OnInit } from '@angular/core';
import { Hall } from 'src/app/models/hall.model';
import { City } from 'src/app/models/city.model';

import { HallService } from 'src/app/services/hall.service';
import { CityService } from 'src/app/services/city.service';


@Component({
  selector: 'app-add-hall',
  templateUrl: './add-hall.component.html',
  styleUrls: ['./add-hall.component.css']
})
export class AddHallComponent implements OnInit {
  cities?: City[];

  // @ts-ignore
  hall: Hall = {
    name: '',
    placeqty:'',
    cityid:this.retrieveCities(),




  };
  submitted = false;

  constructor(private  hallService:HallService,private cityService:CityService) { }

  ngOnInit(): void {
  }
  saveHall(): void {
    const data = {
      name: this.hall.name,
      placeqty: this.hall.placeqty,
      cityid: this.hall.cityid

    };
    console.log(data.cityid);
    this.hallService.create(data)
      .subscribe(
        response => {
        console.log("city")
          console.log(response);
          this.submitted = true;
        },
        error => {
          console.log(error);
        });
  }
  newHall(): void {
    this.submitted = false;
    this.hall = {
      name: '',
      placeqty: '',
      cityid: this.retrieveCities()


    };
  }

  retrieveCities(): any {
   this.cityService.getAll()
      .subscribe(
        data => {
          this.cities = data;
          console.log(data);
          return data;
          },
        error => {
          console.log(error);
      return error;
        });

  }
}

和我的Halls模型:

代码语言:javascript
运行
复制
import {City} from "./city.model";

export class Hall {
  id?:any;
  name?:string;
  placeqty?:string;

  cityid?:City;

}

因此,在发布此表单后,我收到以下错误:

代码语言:javascript
运行
复制
 2021-11-01 11:34:10.236  WARN 14120 --- [io-8888-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.example.model.Cities` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('2'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.example.model.Cities` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('2')
     at [Source: (PushbackInputStream); line: 1, column: 43] (through reference chain: com.example.model.Halls["cityid"])]

在这种情况下,我做错了什么?

我将添加来自Java和Angular的城市模型

Java:

代码语言:javascript
运行
复制
package com.example.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "cities")

public class Cities {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;

@Column(name = "name")
private String name;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


    

}

以及它的角度部分:

代码语言:javascript
运行
复制
export class City {
  id?:any;
  name?:string;
}

我到底要在哪里转换它?以下是我的帖子有效负载:

代码语言:javascript
运行
复制
name: "test", placeqty: "100", cityid: "2"}
cityid: "2"
name: "test"
placeqty: "

我还尝试使用ngvalue而不是value:

代码语言:javascript
运行
复制
 <select  [(ngModel)]="hall.cityid" name="cityid">
        <option *ngFor="let c of cities" [ngValue]='c.id'>{{c.name}}</option>
      </select>

不走运。

EN

回答 2

Stack Overflow用户

发布于 2021-11-01 09:45:38

com.example.model.Halls"cityid")]

“没有要从字符串值(‘2’)反序列化的字符串参数构造函数/工厂方法”

问题出在您的JSON中,您可能将ID作为字符串发送。确保该字段是一个数字。

票数 0
EN

Stack Overflow用户

发布于 2021-11-01 12:49:49

我终于把它修好了。我以这样的方式编辑了城市的选择框:

代码语言:javascript
运行
复制
<select  [(ngModel)]="hall.cityid" name="cityid">
        <option *ngFor="let city of cities" [ngValue]="city">{{city.name}}</option>

      </select>

它解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69795049

复制
相关文章

相似问题

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