通过Axios发送发布请求正在在Spring-Boot Backend中生成一个空请求机体.在Postman中工作,但不



我有一个反应前端和弹簧后端。我为后端提供了休息服务,该服务将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();
    }

}

textsummarizerizercontroller

@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 frontend

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]

上面的亮点是所有字段的摘要。

我是一个反应初学者,所以请让我知道任何错误。

谢谢

问题是,您不必要地将summarizerDataheaders与对象构造函数运算符({})包装。您之前已经创建了对象,这应该解决您的问题:

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工具(Chrome,Firefox)调查您的HTTP调用。它将允许您要查看请求主体中实际发送的内容,请参阅请求和响应标头以及其值等。

最新更新