当前位置: 首页 > 知识库问答 >
问题:

Spring启动-出现意外错误(类型=错误请求,状态=400)。缺少必需的请求正文

容柏
2023-03-14

我创建了一个简单的SpringBootREST服务来处理HTML页面中的发布数据。当我发布数据时,一切正常,但当我想检查@RequestMapping value href上的数据时,我看到错误消息:

白标错误页

此应用程序没有/error的显式映射,因此您将其视为回退。

周三11月15 13:33:46CET 2017有一个意外的错误(类型=坏请求,状态=400)。缺少所需的请求正文:公共org.springframework.http.响应实体

如何检查和获取发送的数据?我的代码:

JS:

$.ajax({
    url: 'http://localhost:8080/api/questionsPost',
    dataType: 'json',
    type: 'post',
    contentType: 'application/json',
    data: JSON.stringify(scoreObj),
    success: function( data, textStatus, jQxhr ){
        console.log(data, textStatus, jQxhr)
    },
    error: function( jqXhr, textStatus, errorThrown ){
        console.log( jqXhr, textStatus, errorThrown );
    }
}); 

Rest控制器:

package pl.sample.atms.web.rest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import pl.sample.atms.dao.QuestionRepository;
import pl.sample.atms.dto.Question;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping(value = "/api",  method = {RequestMethod.GET, RequestMethod.POST})
public class QuestionRestController {

    @Autowired
    private QuestionRepository questionRepository;

    @PostMapping("/questionsPost")
    public ResponseEntity<List<Question>> getQuestions5(@RequestBody Question myQuestion) {
        System.out.println(ResponseEntity.ok(new ArrayList<>()));
        System.out.println(myQuestion);
        return ResponseEntity.ok(new ArrayList<>());
    }

}

问题dto

package pl.sample.atms.dto;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Question {

    @Id
    private Long id;

    private String title;

    public Question() {
    }

    public Long getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

问题库

package pl.sample.atms.dao;

import org.springframework.data.repository.CrudRepository;
import pl.sample.atms.dto.Question;

import java.util.List;

public interface QuestionRepository extends CrudRepository<Question, Long> {
    List<Question> findByTitle(String title);
}

使现代化

我更改了Rest控制器代码:

package pl.sample.atms.web.rest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import pl.sample.atms.dao.QuestionRepository;
import pl.sample.atms.dao.UserInfoRepository;
import pl.sample.atms.dto.Question;
import pl.sample.atms.dto.QuestionAnswer;
import pl.sample.atms.dto.Response;
import pl.sample.atms.dto.UserInfo;

import java.util.ArrayList;
import java.util.List;

import static org.apache.commons.lang3.StringUtils.isBlank;

@RestController
@RequestMapping("/api")
public class QuestionRestController {

    @Autowired
    private QuestionRepository questionRepository;

    @Autowired
    private UserInfoRepository userInfoRepository;

    private List<Question> question = new ArrayList<Question>();

    @GetMapping(value = "/questionsGet")
    public Response getResource() {
        Response response = new Response("Done", question);
        return response;
    }

    @PostMapping(value = "/questionsPost")
    public Response postCustomer(@RequestBody Question oneQuestion) {
        question.add(oneQuestion);

        Response response = new Response("Done", oneQuestion);
        return response;
    }

}

我创建了新的类-响应:

package pl.sample.atms.dto;

public class Response {
    private String status;
    private Object data;

    public Response(){

    }

    public Response(String status, Object data){
        this.status = status;
        this.data = data;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

现在我可以看到一些发送的数据,但不幸的是,它不是使用JavaScript JSON生成和发送的,但是:

{"status":"Done","data":[{"id":null,"title":null}]}

我需要的JSON的结构:

"{"N":["4","4","5","4","2"],"E":["4","4","5","3","1"],"O":["3","3","4","2","3"],"U":["2","2","2","2","4"],"S":["3","2","2","3","3"]}"

我真的不知道我做错了什么,但我觉得我已经接近解决这个问题了。

共有1个答案

欧阳哲
2023-03-14

在使用@Post映射注释时,您将方法限制为仅发布请求。

这相当于:

@RequestMapping(value = "/questionsPost", method = RequestMethod.POST)

如果您想同时接受POST和GET,我会将其更改为:

@RequestMapping(value = "/questionsPost")

该值表明邮政请求-

更新根据你对你试图完成的事情的评论,我强烈建议有两种不同的方法。如果您要发布数据或尝试获取数据,Spring将知道调用哪个方法。然后相应地调整你的业务逻辑。

Post的一种方法:

@RequestMapping(value = "/questions", method = RequestMethod.POST)

获取的一种方法:

@RequestMapping(value = "/questions", method = RequestMethod.GET)
 类似资料:
  • 我在Heroku上托管了一个Springboot应用程序。构建和部署工作得非常好。然而,每当我想访问该方法时,我都会看到这个错误<代码>出现意外错误(类型=错误请求,状态=400) 如果我使用loclhost,但使用Heroku的应用程序时抛出错误,那么它在Postman上运行得非常好。 这是控制器的样子。我猜这就是问题的来源。 . 你认为我能做些什么让api在Heroku上工作?

  • 试图请求映射提交,但我得到了这个错误,我真的不明白为什么,因为我以为每个人都提供了: [...] 上的方法是在我的控制器中映射此方法:

  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!

  • 我正在为一个项目使用Hackerrank API。查看官方文档,点击这里! 在他们的网站上有一个使用UNIREST的例子, 由于我使用的是axios,所以我将其转换为类似的axios代码,如下所示: 我希望这只适用于示例中所示的示例,但它给我带来了以下错误: 请求失败,状态代码为400 错误:请求失败,状态代码为400 在createError(createError.js:16) 在sett(s

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示: