安叔 2017-04-16 02:18 采纳率: 50%
浏览 11783

dva的fetch请求如果是post类型,springmvc作为后台该如何接收并返回数据?

fetch请求如下(前段UI框架是antd):
1.导航栏上点击Uers按钮,跳转至/users

       <Menu.Item key="/users">
        <Link to="/users"><Icon type="bars" />Users</Link>
      </Menu.Item>

2.路由跳转控制

function RouterConfig({ history }) {
  return (
    <Router history={history}>
      <Route path="/" component={IndexPage} />
      <Route path="/users" component={Users} />
    </Router>
  );
}

3.上面的Users控件(component)如下

 function Users({ location }) {
  return (
    <MainLayout location={location}>
      <div className={styles.normal}>
        <UsersComponent />
      </div>
    </MainLayout>
  );
}

4.最终地址会跳转到一个fetch方法中,该方法会调用yield call来执行一个请求,具体如下

     *fetch({ payload: { page = 1 } }, { call, put }) {
      const { data, headers } = yield call(usersService.fetch, { page });
      yield put({
        type: 'save',
        payload: {
          data,
          total: parseInt(headers['x-total-count'], 10),
          page: parseInt(page, 10),
        },
      });
    },

5.yield call方法里面的usersService.fetch方法如下(PAGESIZE目前是常量)

 export function fetch({ page }) {
  return request('/api/user/userList', {
    method: 'POST',
    headers: {
      //'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
            'Content-Type': 'application/json',
    },
    body: {
      _page: { page },
      _limit: { PAGE_SIZE },
    },
  });
  // return request(`/api/user/userList?_page=${page}&_limit=${PAGE_SIZE}`);
}

6.request.js

 import fetch from 'dva/fetch';

function parseJSON(response) {
  return response.json();
}

function checkStatus(response) {
  if (response.status >= 200 && response.status < 300) {
    return response;
  }

  const error = new Error(response.statusText);
  error.response = response;
  throw error;
}

export default async function request(url, options) {
  console.log(1232131);
  console.log(options);
  const response = await fetch(url, options);
    // .then(checkStatus);

  // checkStatus(response);
  //
  const data = await response.json();
  const ret = {
    data,
    headers: {},
  };
  if (response.headers.get('x-total-count')) {
    ret.headers['x-total-count'] = response.headers.get('x-total-count');
  }
  return ret;
}

7.后台springmvc接收数据的方法

  //7.后台springmvc接收数据的方法
 @Controller
@RequestMapping("/user")
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/userList")
    //@ResponseBody
    public void userList(final HttpServletRequest request, ModelMap modelMap) throws Exception{
        String page = request.getParameter("_page");
        String limit = request.getParameter("_limit");

        List<CustBaseInfo> users = userService.getUserList(new CustBaseInfoExample());
        modelMap.put("data", users);
    }
}

备注:
1.如果fetch方法用的是GET请求,我把参数拼接在URL后面是没有问题的,后台可以接收到,但是这种情况下,后台如何将数据返回给dva框架,我现在是将返回结果users放在了modelmap当中,但前台还是获取不到数据
2.如果fetch是post请求,前台连数据都发不出,我是f12下看netWork就没有数据发送

post请求时,后台接受到的数据,为null
前台发送请求
前台发送请求
响应数据没有

  • 写回答

2条回答

  • devmiao 2017-04-16 07:22
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型