Vin*_*ath 5 javascript java spring-mvc reactjs spring-boot
我有一个反应前端和一个弹簧后端。我为后端提供了休息服务,该服务将summerrData 作为输入并返回与输出相同的值。我有一个表单,需要一个文本区域输入和提交按钮。通过 axios 发送 post 请求时,我得到一个空对象。我已经通过 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();
    }
}
文本摘要控制器
@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;
    }
}
反应前端
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。
我是一个反应初学者,所以请让我知道任何错误。
谢谢
问题在于您不必要地将summarizerDataandheaders与对象构造函数运算符 ( {}) 一起包装。您之前已经创建了对象,这应该可以解决您的问题:
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 调用。例如,它将允许您查看请求正文中实际发送的内容,查看请求和响应标头及其值等。
| 归档时间: | 
 | 
| 查看次数: | 7209 次 | 
| 最近记录: |