首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >post请求在spring引导和angularjs之间的错误请求

post请求在spring引导和angularjs之间的错误请求
EN

Stack Overflow用户
提问于 2016-07-17 11:52:59
回答 1查看 616关注 0票数 0

我有两个小项目,后端spring-boot端负责提供数据,angularjs前端部分只是显示数据。我试图张贴一个json从角度和弹簧引导侧消耗和发送一个回应。

这是json中的赛马数据;"jokey“是指骑手,并包含骑手信息:

代码语言:javascript
复制
var list = {"horses":  [{"horseId":45942,"horseName":"Decolte","raceId":8449,"kilo":61.0,"jokey":{"name":"AYETULLAH DEMİR","raceNumber":41,"first":1,"second":4,"third":0,"fourth":1},"ekuriId":0},
                        {"horseId":27520,"horseName":"Busıness Man","raceId":8449,"kilo":57.0,"jokey":{"name":"CİVAN ÖZŞAHİN","raceNumber":190,"first":7,"second":15,"third":18,"fourth":12},"ekuriId":0},
                        {"horseId":55856,"horseName":"Erselçuk","raceId":8449,"kilo":57.0,"jokey":{"name":"NAİL EREN","raceNumber":64,"first":2,"second":0,"third":4,"fourth":2},"ekuriId":0},
                        {"horseId":52940,"horseName":"Haşim Ağa","raceId":8449,"kilo":57.0,"jokey":{"name":"DOĞUKAN AYDOĞAN","raceNumber":380,"first":11,"second":18,"third":10,"fourth":24},"ekuriId":0},
                        {"horseId":53431,"horseName":"İhtiyar","raceId":8449,"kilo":57.0,"jokey":{"name":"CÜNEYİT GÖKÇE","raceNumber":598,"first":32,"second":52,"third":64,"fourth":65},"ekuriId":0},
                        {"horseId":51778,"horseName":"Urla Zamanı","raceId":8449,"kilo":57.0,"jokey":{"name":"ADEM ŞEN","raceNumber":280,"first":18,"second":25,"third":32,"fourth":32},"ekuriId":0},
                        {"horseId":51816,"horseName":"Wın Every Day","raceId":8449,"kilo":57.0,"jokey":{"name":"EMRE NALBANT","raceNumber":405,"first":19,"second":26,"third":36,"fourth":33},"ekuriId":0},
                        {"horseId":58650,"horseName":"Lıon Amed","raceId":8449,"kilo":52.0,"jokey":{"name":"CANER KARADEMİR","raceNumber":134,"first":7,"second":7,"third":8,"fourth":7},"ekuriId":0},
                        {"horseId":51239,"horseName":"Catch The Wınd","raceId":8449,"kilo":57.0,"jokey":{"name":"MÜSLÜM CANPOLAT","raceNumber":238,"first":5,"second":12,"third":12,"fourth":19},"ekuriId":0},
                        {"horseId":46263,"horseName":"Ian Tapp","raceId":8449,"kilo":58.0,"jokey":{"name":"ERDEM NUR TÜFEKÇİ","raceNumber":79,"first":3,"second":1,"third":4,"fourth":5},"ekuriId":0},
                        {"horseId":51647,"horseName":"Sılverado","raceId":8449,"kilo":57.0,"jokey":{"name":"ÜMİT DERYA ALTEKİN","raceNumber":1185,"first":48,"second":53,"third":64,"fourth":84},"ekuriId":0},
                        {"horseId":57231,"horseName":"Junıor Duru","raceId":8449,"kilo":58.0,"jokey":{"name":"BEDRİ TEPE","raceNumber":716,"first":45,"second":55,"third":50,"fourth":67},"ekuriId":0}
                       ]};

它基本上是一个数组,但是堆栈溢出上的人告诉ajax请求中的数据应该是一个对象,所以我在前面添加了“array:”。在代码中手动添加json。

这是http请求:

代码语言:javascript
复制
$http({
    url: 'http://localhost:8080/horseHistory',
    method: 'POST',
    contentType: "application/json",
    data: list.horses,
    headers: {
        "Content-Type": "application/json"
    }
}).success(function(data) {
    console.log(data);
});

在后端,我只想看到一个正在工作的http连接,所以它大部分是空的。这是spring启动函数:

代码语言:javascript
复制
@RequestMapping(value = "/horseHistory", method = RequestMethod.POST )
public ResponseEntity<Void> getHorseHistory(@RequestBody HorseRaceModel[] horseRaces) throws IOException {

    System.out.println(horseRaces[0]);

    return null;
}

HorseRaceModel:

代码语言:javascript
复制
package ganyan;

public class HorseRaceModel {
int horseId;
String horseName;
int raceId;
double kilo;
JokeyModel jokey;
int ekuriId;

public HorseRaceModel(int horseId, String horseName, int raceId, double kilo, JokeyModel jokey, int ekuriId) {
    this.horseId = horseId;
    this.horseName = horseName;
    this.raceId = raceId;
    this.kilo = kilo;
    this.jokey = jokey;
    this.ekuriId = ekuriId;
}

public int getHorseId() {
    return horseId;
}

public void setHorseId(int horseId) {
    this.horseId = horseId;
}

public void setHorseName(String horseName) {
    this.horseName = horseName;
}

public String getHorseName() {
    return horseName;
}

public int getRaceId() {
    return raceId;
}

public void setRaceId(int raceId) {
    this.raceId = raceId;
}

public double getKilo() {
    return kilo;
}

public void setKilo(double kilo) {
    this.kilo = kilo;
}

public JokeyModel getJokey() {
    return jokey;
}

public void setJokey(JokeyModel jokey) {
    this.jokey = jokey;
}

public int getEkuriId() {
    return ekuriId;
}

public void setEkuriId(int ekuriId) {
    this.ekuriId = ekuriId;
}

}

JokeyModel:

代码语言:javascript
复制
public class JokeyModel {

private String name;
private int raceNumber;
private int first;
private int second;
private int third;
private int fourth;

public int getSecond() {
    return second;
}

public void setSecond(int second) {
    this.second = second;
}

public String getName() {
    return name;
}

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

public int getRaceNumber() {
    return raceNumber;
}

public void setRaceNumber(int raceNumber) {
    this.raceNumber = raceNumber;
}

public int getFirst() {
    return first;
}

public void setFirst(int first) {
    this.first = first;
}

public int getThird() {
    return third;
}

public void setThird(int third) {
    this.third = third;
}

public int getFourth() {
    return fourth;
}

public void setFourth(int fourth) {
    this.fourth = fourth;
}

}

来自Chrome控制台的错误:

代码语言:javascript
复制
Failed to load resource: the server responded with a status of 400 (Bad Request) http://localhost:8080/horseHistory

来自Java控制台的错误:

代码语言:javascript
复制
nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.HashMap out of START_ARRAY token
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-17 20:42:08

我不熟悉Spring,也不知道为什么有人告诉您发布一个JSON对象,而不是JSON数组,但我看到您没有连贯一致地这样做。

您将JSON数组封装在一个名为list的JSON对象中,但是通过指定data: list.horses,仍然只传递嵌入的JSON数组。因为您希望发送整个JSON对象,所以应该指定data: list

此外,我认为您需要在服务器端定义包装器模型,这可能是如下所示的类:

代码语言:javascript
复制
public class ListModel {
    private List<HorseRaceModel> horses;

    public List<HorseRaceModel> getHorses() {
            return horses;
    }

    public void setHorses(List<HorseRaceModel> horses) {
        this.horses = horses;
    }
}

最后,应该指示使用post的方法将请求体解析为ListModel。这意味着将方法修改为如下所示:

代码语言:javascript
复制
@RequestMapping(value = "/horseHistory", method = RequestMethod.POST )
public ResponseEntity<Void> getHorseHistory(@RequestBody ListModel horseRaces) throws IOException {

    System.out.println(horseRaces.getHorses().get(0).getName());

    return null;
}

侧记:我还修改了代码,以打印第一个马的名称,而不是由System.out.println(horseRaces.getHorses().get(0));打印的对象指针。你可能想印些别的东西。您还可能希望为包装器对象和模型使用更好的名称(而不是listListModel)。

注释中的注释:您的HorseRaceModel类没有空构造函数,您需要提供一个反序列化才能工作

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

https://stackoverflow.com/questions/38420894

复制
相关文章

相似问题

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