Reactjs/javaspring Boot-RequestMethod.POST-null值
我正在使用reactjs和JavaSpring引导。我正在尝试建立一个管理面板-将使用POST而不是GET请求-来更新站点面板数据 我一直在使用GET,因为我无法让它工作,但现在数据更复杂了,我觉得我必须尝试让它作为一个帖子工作。我确信axios部件正在将数据推送到服务器上——我可以在有效负载中看到它——但当我打印出参数时,它们显示为null 反应动作Reactjs/javaspring Boot-RequestMethod.POST-null值,java,spring,request,axios,Java,Spring,Request,Axios,我正在使用reactjs和JavaSpring引导。我正在尝试建立一个管理面板-将使用POST而不是GET请求-来更新站点面板数据 我一直在使用GET,因为我无法让它工作,但现在数据更复杂了,我觉得我必须尝试让它作为一个帖子工作。我确信axios部件正在将数据推送到服务器上——我可以在有效负载中看到它——但当我打印出参数时,它们显示为null 反应动作 import axios from 'axios'; import CONFIG from './_configApi';//add conf
import axios from 'axios';
import CONFIG from './_configApi';//add config api
import { fetchInitPane } from './initPaneAction';
export const FETCH_EDIT_PANE_SUCCESS = 'FETCH_EDIT_PANE_SUCCESS'
export const FETCH_EDIT_PANE_FAILURE = 'FETCH_EDIT_PANE_FAILURE'
export function editPaneSuccess(response) {
return {
type: FETCH_EDIT_PANE_SUCCESS,
payload: response
}
}
export function editPaneFail(response) {
return {
type: FETCH_EDIT_PANE_FAILURE,
payload: response
}
}
export function fetchEditPane(data) {
let url = CONFIG.EDIT_PANE_API;
return function (dispatch) {
/*axios.get(url, {
params: data
})*/
axios.post(url, data)
.then(function (response) {
response = null;
dispatch(editPaneSuccess(response));
dispatch(fetchInitPane(null));
})
.catch(function (error) {
dispatch(editPaneFail(error));
});
}
}
但我的问题在于Java方法
//api/editPane
@RequestMapping(value = {"/api/editPane"}, method = RequestMethod.POST)
@CrossOrigin(origins = {"*"})
public ResponseEntity<?> editpane(
@RequestParam(value="tile1", required=false) String tile1,
@RequestParam(value="tile2", required=false) String tile2,
@RequestParam(value="about", required=false) String about,
@RequestParam(value="privacy", required=false) String privacy
//HttpServletRequest request
) throws Exception {
JSONObject loggedUser = getLoggedInUser();
String role = (String) loggedUser.get("role");
//check to make sure they are an admin user - this is sensitive data
//System.out.println("role"+ role);
System.out.println("tile1"+ tile1);
System.out.println("tile2"+ tile2);
System.out.println("about"+ about);
System.out.println("privacy"+ privacy);
if(role.equals("1")){
//create api admin instance
//AdminModel myApiAdmin = new AdminModel();
//find matching row
Long id = (long) 0;
TblSitePages sitePages = tblSitePagesRepository.findById(id);
//tile1
if(tile1 != sitePages.getTile1()){
//sitePages.setTile1(tile1);
}
//tile2
if(tile2 != sitePages.getTile2()){
//sitePages.setTile2(tile2);
}
//about
if(about != sitePages.getAbout()){
sitePages.setAbout(about);
}
//privacy
if(privacy != sitePages.getPrivacy()){
sitePages.setPrivacy(privacy);
}
tblSitePagesRepository.saveAndFlush(sitePages);
JSONObject response = ResponseWrapper(null, "success", "Updating site pane data");
return new ResponseEntity<>(response, HttpStatus.OK);
} else{
JSONObject response = ResponseWrapper(null, "error", "Not an admin");
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
//api/editPane
@RequestMapping(值={“/api/editPane”},方法=RequestMethod.POST)
@交叉原点(原点={“*”})
公共响应编辑窗格(
@RequestParam(value=“tile1”,required=false)字符串tile1,
@RequestParam(value=“tile2”,required=false)字符串tile2,
@RequestParam(value=“about”,required=false)字符串about,
@RequestParam(value=“privacy”,required=false)字符串隐私
//HttpServletRequest请求
)抛出异常{
JSONObject loggedUser=getLoggedInUser();
字符串角色=(字符串)loggedUser.get(“角色”);
//检查以确保他们是管理员用户-这是敏感数据
//System.out.println(“角色”+角色);
System.out.println(“tile1”+tile1);
System.out.println(“tile2”+tile2);
System.out.println(“关于”+about);
System.out.println(“隐私”+隐私);
如果(角色等于(“1”)){
//创建api管理实例
//AdminModel myApiAdmin=新的AdminModel();
//查找匹配行
长id=(长)0;
TblSitePages sitePages=tblSitePagesRepository.findById(id);
//瓷砖1
if(tile1!=sitePages.getTile1()){
//sitePages.setTile1(tile1);
}
//瓷砖2
if(tile2!=sitePages.getTile2()){
//sitePages.setTile2(tile2);
}
//关于
if(about!=sitePages.getAbout()){
sitePages.setAbout(关于);
}
//隐私权
if(privacy!=sitePages.getPrivacy()){
设置隐私(隐私);
}
tblSitePagesRepository.saveAndFlush(站点页面);
JSONObject response=ResponseWrapper(null,“成功”,“更新站点窗格数据”);
返回新的ResponseEntity(response,HttpStatus.OK);
}否则{
JSONObject response=ResponseWrapper(null,“错误”,“不是管理员”);
返回新的ResponseEntity(response,HttpStatus.OK);
}
}
如果使用查询参数(显示为@RequestParam()),则需要调用如下服务
http://localhost:8080/api/editPane?title1="value"&title2="value"
required=false表示查询参数是可选的。因此,如果不提供参数,它将为null
这里有一个更好的解决方案:
使用pojo类,如
public class EditPane {
private String title1;
private String title2;
private String about;
private String privacy;
public EditPane() {}
// Getter and Setters
}
重写您的Post方法:
@RequestMapping(value = {"/api/editPane"}, method = RequestMethod.POST)
@CrossOrigin(origins = {"*"})
public ResponseEntity<?> editpane(@RequestBody EditPane editPane) {
//doSuff();
}
@RequestMapping(value={/api/editPane},method=RequestMethod.POST)
@交叉原点(原点={“*”})
公共响应属性editpane(@RequestBody editpane editpane){
//doSuff();
}
解决方案如下
在axios的JS端-使用POST
import axios from 'axios';
import CONFIG from './_configApi';//add config api
import { fetchInitPane } from './initPaneAction';
export const FETCH_EDIT_PANE_SUCCESS = 'FETCH_EDIT_PANE_SUCCESS'
export const FETCH_EDIT_PANE_FAILURE = 'FETCH_EDIT_PANE_FAILURE'
export function editPaneSuccess(response) {
return {
type: FETCH_EDIT_PANE_SUCCESS,
payload: response
}
}
export function editPaneFail(response) {
return {
type: FETCH_EDIT_PANE_FAILURE,
payload: response
}
}
export function fetchEditPane(data) {
let url = CONFIG.EDIT_PANE_API;
return function (dispatch) {
axios.post(url, data)
.then(function (response) {
response = null;
dispatch(editPaneSuccess(response));
dispatch(fetchInitPane(null));
})
.catch(function (error) {
dispatch(editPaneFail(error));
});
}
}
在Java端,通过以下命令选择变量
//api/editPane
@RequestMapping(value = {"/api/editPane"}, method = RequestMethod.POST)
@CrossOrigin(origins = {"*"})
public ResponseEntity<?> editpane(
@RequestBody EditPane editPane
) throws Exception {
String tile1 = editPane.getTile1();
String tile2 = editPane.getTile2();
String about = editPane.getAbout();
String privacy = editPane.getPrivacy();
String terms = editPane.getTerms();
}
//api/editPane
@RequestMapping(值={“/api/editPane”},方法=RequestMethod.POST)
@交叉原点(原点={“*”})
公共响应编辑窗格(
@RequestBody编辑窗格编辑窗格
)抛出异常{
String tile1=editPane.getTile1();
String tile2=editPane.getTile2();
字符串about=editPane.getAbout();
String privacy=editPane.getPrivacy();
String terms=editPane.getTerms();
}
//api/editPane
@RequestMapping(value = {"/api/editPane"}, method = RequestMethod.POST)
@CrossOrigin(origins = {"*"})
public ResponseEntity<?> editpane(
@RequestBody EditPane editPane
) throws Exception {
String tile1 = editPane.getTile1();
String tile2 = editPane.getTile2();
String about = editPane.getAbout();
String privacy = editPane.getPrivacy();
String terms = editPane.getTerms();
}