- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 React 前端和一个 Spring 后端。我为后端提供休息服务,它将 summarizerData 作为输入并返回与输出相同的内容。我有一个采用文本区域输入和提交按钮的表单。通过 axios 发送发布请求时,我得到一个空对象。我已经通过 postman 测试了 api,但是当通过 axios 提交它时,我收到了 500 内部错误。
我在 RestController 中启用了 CORS。
请告诉我问题是什么SummarizerData Pojo
@Entity(name = "user_text_data")
@Getter
@Setter
@ToString
public class SummarizerData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private String paragraph;
@Column
private LocalDateTime creationDate;
@Transient
private List<Sentence> summarizedSentences;
public SummarizerData(){
}
public SummarizerData(String paragraph){
this.paragraph = paragraph;
this.creationDate = LocalDateTime.now();
}
}
TextSummarizerController
@RepositoryRestController
@RequestMapping("/api")
public class TextSummarizerController{
@Autowired
SummarizerDataRepository repository;
Logger logger = Logger.getLogger(TextSummarizerController.class.getName());
@CrossOrigin
@RequestMapping(method = RequestMethod.POST, value = "/summarize")
public @ResponseBody SummarizerData getSummarizerData(@RequestBody SummarizerData data ){
System.out.println("Returning Summarized Data");
SummaryTool summaryTool = new SummaryTool();
logger.info(data.toString());
repository.save(data);
data.setSummarizedSentences(summaryTool.startSummarization(data.getParagraph()));
return data;
}
}
React 前端
import React, { Component } from 'react';
import './App.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import Navbar from './components/Navbar';
import ParagraphEntry from './components/ParagraphEntry';
import {BrowserRouter as Router, Route} from 'react-router-dom';
import axios from 'axios';
class App extends Component {
constructor(props){
super(props);
this.state = {
"summarizerData" : {},
"paragraph" : ""
} ;
}
onChange = (e) => {
this.setState({"paragraph" : e.target.value});
};
onSubmit= (e) => {
e.preventDefault();
var headers = {
'Content-Type': 'application/json'
}
const summarizerData = {
"paragraph" : this.state.paragraph,
"creationDate" : "2019-03-10T00:58:23",
"summarizedSentences" :null
};
axios.post('http://localhost:8080/api/summarize',{summarizerData}, {headers})
.then(res => console.log(res.data))
console.log(summarizerData);
}
handleClear = (e) => {
console.log(e);
e.target.value = "";
this.setState({"paragraph" : ""});
}
render() {
return (
<div className="App">
<Navbar />
<ParagraphEntry onChange = {this.onChange} onSubmit={this.onSubmit} handleClear = {this.handleClear} paragraph = {this.state.paragraph}/>
</div>
);
}
}
export default App;
错误日志
Returning Summarized Data
2019-03-18 00:10:19.487 INFO 8336 --- [nio-8080-exec-5] c.n.t.s.rest.TextSummarizerController : SummarizerData(id=null, paragraph=null, creationDate=null, summarizedSentences=null)
2019-03-18 00:10:19.491 WARN 8336 --- [nio-8080-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1048, SQLState: 23000
2019-03-18 00:10:19.491 ERROR 8336 --- [nio-8080-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : Column 'creation_date' cannot be null
2019-03-18 00:10:19.495 ERROR 8336 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
java.sql.SQLIntegrityConstraintViolationException: Column 'creation_date' cannot be null
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:970) ~[mysql-connector-java-8.0.15.jar:8.0.15]
上面的亮点是所有字段都为空的 SummarizerData。
我是一个 react 初学者,所以请让我知道任何错误。
谢谢
最佳答案
问题是您不必要地用对象构造函数运算符 ({}
) 包装了 summarizerData
和 headers
。您之前已经创建了对象,这应该可以解决您的问题:
axios.post('http://localhost:8080/api/summarize', summarizerData, headers)
{summarizerData}
所做的是创建一个这样的对象:
{
"summarizerData": {
"paragraph": this.state.paragraph,
"creationDate": "2019-03-10T00:58:23",
"summarizedSentences": null
}
}
无法映射到后端的 SummarizerData
。您可以使用 Devloper Tools(Chrome、Firefox)来调查您的 HTTP 调用。它会让你例如要查看请求正文中实际发送的内容,请查看请求和响应 header 及其值等。
关于javascript - 通过 Axios 发送 post 请求会在 Spring-Boot 后端生成一个空的 RequestBody。在 Postman 中工作,但不能通过 Axios 发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55210761/
当我定义 requestBody 时,它不会显示在 swagger 文档中。我想为 swagger 中的 gpx 文件创建一组图像和单个文件上传。如何才能实现 requestBody 像参数属性一样显
我正在使用 Spring 4.x 做 Spring Rest Api 项目 这有效: Controller.java @PostMapping("newTransaction") Transactio
我正在向服务器发送一个 JSON 对象,该服务器将填充我的域对象报告。 public class CustomReport {String name; String name; String emai
我有一个非常琐碎的问题,它占用了我很多时间。 我有一个 Spring Rest 服务,它接受 @RequestBody 中的模型对象。我在模型对象中传递的是格式为 yyyy-MM-dd'T'HH:mm
我一直在开发 Spring Boot Rest api 服务,这是我的 Rest Controller 方法之一: @RequestMapping(value = "manager", method
我使用 Spring Boot 2.0.8.RELEASE。 我有一个 @RestController 方法,如下所示: @PostMapping("/message") public
类(class): class Person { private String name; private List addr; } c
我有以下类作为我的@RequestBody,但我无法发送我的请求,我尝试以不同的格式准备 JSON,但它们都不起作用。 处理程序 @RequestMapping("/grades") @Respons
@PatchMapping("/update") HttpEntity updateOnlyIfFieldIsPresent(@RequestBody Person person) { if(
我正在尝试使用 apache 集合中的 MultiValueMap(MultiMap 的实现)。我正在使用 Spring MVC 的 @RequestBody 注释。但是,我不断收到 HTTPMedi
Requestbody 没有映射到我在这里使用的对象。 PaymentRequest 中的所有字段都为空。我看到注释和映射一切似乎都是正确的。 @RestController @RequestMapp
假设以下 JSON: { "attr_A": "val_A", "array_A": [{ "attr_B": "val_B" }] } 以及以下两个类: public class C
JavaScript 代码: function deleteMarks(list){ $http.post('/api/marks/delete/all',list).then( fu
我是 Java/Spring 的新手,正在尝试在现有项目中设置 API 端点。我基本上已经复制了一些当前正在工作的其他端点,但我的端点在被击中时没有验证,这似乎是因为 @RequestBody 没有填
我正在使用 postman 来测试我的请求。所以我从 postman 那里选择了显示代码 fragment 的选项并选择了 OkHttp fragment 是: OkHttpClient client
我使用 Spring-boot 2.0.1 和 WebFlux 作为 Rest 服务器。 在我的 RestController 中,我想自动反序列化一个对象(产品)。但我收到 Jackson 错误,就
我创建了一个简单的 REST 服务 (POST)。但是当我从 postman 那里调用这个服务时,@RequestBody 没有收到任何值。 import org.springframework.ht
PostMan传参给@RequestBody(接受前端参数) 今天新接手一个项目框架,需要改造,但后台写好方法,准备用postman 测试时候,发现用以前传参方式不行,需要需要将json字符串转成
springmvc @RequestBody String类型参数 通过如下配置: <bean id="mappingJacksonHttpMessageConverter&qu
目录 SpringMVC @RequestBody为null 关于inputsteam的一些理解 @RequestBody 自动映射原理的简单介
我是一名优秀的程序员,十分优秀!