springboot中PostMapping正常接收json参数后返回404问题

目录
  • PostMapping接收json参数后返回404
    • 问题描述
    • 解决
  • @PostMapping注解解析

PostMapping接收json参数后返回404

问题描述

js中传递json数据给后端,后端可以正常接收参数,但返回404。

js

                function rootConfirm(ids, types) {
                    $.tool.confirm("确定结束" + options.modalName + "?", function () {
                        $.ajax({
                            type: "post",
                            url: options.confirmUrl,
                            traditional: true,
                            data: {
                                'ids': ids,
                                'types': types
                            },
                            success: function (json) {
                                $.tool.ajaxSuccess(json);
                                $.tableUtil.refresh();
                            },
                            error: $.tool.ajaxError
                        });
                    }, function () {}, 5000);
                }

后台

 @RequiresPermissions(value = {"root_orders:confirm", "root_orders:batchConfirm"}, logical = Logical.OR)
 @PostMapping(value="/root_orders/confirm")
 public ResponseVO rootConfirmOrder(Long[] ids, String[] types) {
  if (ids == null || types == null)
   return ResultUtil.error(500, "请至少选择一个订单");
  for (int i = 0; i < ids.length; i++) {
   /*可以正常打印*/
   System.out.println("" + ids[i] + ":" + types[i]);
  }
  return ResultUtil.success("成功结束 [" + ids.length + "] 个订单");
 }

解决

添加**@ResponseBody**注解。因为我的函数,所在的类注解是@Controller,但函数是要返回数据而非视图的。

补充

  • @RestController

这个注解相当于@ResponseBody 和 @Controller两个注解的组合,不返回视图,只返回数据。如果一个类上加了这个注解,那么这个类的函数都是返回不了视图的,return “redirect:/XXX/details”;也会只在页面上显示return的字符串。

解决方法是把类上的注解改为@Controller,然后给不返回视图,只返回数据的函数加上注解@ResponseBody。

@PostMapping注解解析

开发过程IDEA提示如将

@RequestMapping(value="/abc" , method = “RequestMethod.POST”)

替换成@PostMapping。现对@PostMapping的实现。

@PostMapping是一个复合注解,Spring framework 4.3引入了@RequestMapping注释的变体,以更好地表示带注释的方法的语义,作为@RequestMapping(method = RequestMethod.POST)的快捷方式。

也就是可以简化成@PostMapping(value="/abc" )即可,主要是方便识记。

下面很多方法都是对应着@RequestMapping的标记的别名。

@RequestMapping(value = “”, path = “”, params = “”, headers = “”,consumes = “”, produces = “”)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.POST)
public @interface PostMapping {
    /**
     * RequestMapping 的别名,
     */
    @AliasFor(annotation = RequestMapping.class)
    String name() default "";
    /**
     *RequestMapping#value的别名, 默认为空字符串,一般需要自己填写
     */
    @AliasFor(annotation = RequestMapping.class)
    String[] value() default {};
    /**
     * RequestMapping#path的别名
     */
    @AliasFor(annotation = RequestMapping.class)
    String[] path() default {};
    /**
     * RequestMapping#params的别名
     */
    @AliasFor(annotation = RequestMapping.class)
    String[] params() default {};
    /**
     * RequestMapping#headers的别名
     */
    @AliasFor(annotation = RequestMapping.class)
    String[] headers() default {};
    /**
     * RequestMapping#consumes的别名
     */
    @AliasFor(annotation = RequestMapping.class)
    String[] consumes() default {};
    /**
     * RequestMapping#produces的别名
     */
    @AliasFor(annotation = RequestMapping.class)
    String[] produces() default {};
}

其他变体如下:

@GetMapping、@PutMapping、@PatchMapping和@DeleteMapping,与@PostMapping实现类似

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot优雅地处理404异常问题

    背景 在使用SpringBoot的过程中,你肯定遇到过404错误.比如下面的代码: @RestController @RequestMapping(value = "/hello") public class HelloWorldController { @RequestMapping("/test") public Object getObject1(HttpServletRequest request){ Response response = new Resp

  • SpringBoot接口接收json参数解析

    目录 SpringBoot接口接收json参数 前言 前提 一.GET 二.DELETE 三.POST/PUT/PATCH Springboot restFul 参数检验 概述 常用注解 简单应用举例 自定义校验 抛出BindException而非MethodArgumentNotValidException SpringBoot接口接收json参数 前言 通常来讲,HTTP 方法会映射为 CRUD 动作,但这并不是严格的限制,有时候 PUT 也可以用来创建新的资源,POST 也可以用来更新资源

  • SpringBoot接口调用之后报404问题的解决方案

    我的接口是这样的: TestCase测试Impl类的方法没有问题,但是Swgger和前端调用接口就会报404错误: 在网上查了很多资料,都说是地址的问题,我参照了上下文 server.port中的端口没问题,我本地的IP也没问题,上下文也没问题,总之地址没问题. 之后看了我接口的注解,我的Controller类用的注解是@RestResultController,而不是@RestController. 使用@RestResultController,如果返回值是String类型就存在指向性问题,

  • springboot项目启动,但是访问报404错误的问题

    目录 springboot项目启动,访问报404错误 我的解决 springboot版本引起的404 环境描述 报错情况如下 springboot项目启动,访问报404错误 今天在做一个springboot项目的时候,是接着别人的项目写的,写完之后想做一下测试,于是就启动了springboot,然后在访问的时候,一直包404的错误,然后百度了一下网上给的方法,包括注解使用@RestController,然后去除掉方法@RequestMapping(value = "/add")中的&q

  • springboot中PostMapping正常接收json参数后返回404问题

    目录 PostMapping接收json参数后返回404 问题描述 解决 @PostMapping注解解析 PostMapping接收json参数后返回404 问题描述 js中传递json数据给后端,后端可以正常接收参数,但返回404. js                 function rootConfirm(ids, types) {                     $.tool.confirm("确定结束" + options.modalName + "?&

  • springboot中不能获取post请求参数的解决方法

    问题描述 最近在做微信小程序,用的spring boot做后端,突然发现客户端发送post请求的时候服务端接收不到参数.问题简化之后如下: 微信小程序端: 在页面放一个按钮进行测试 <!--index.wxml--> <view class="container"> <button catchtap='testpost'>点击进行测试</button> </view> 绑定一个函数发送post请求 //index.js //获

  • ThinkPHP中使用ajax接收json数据的方法

    本文实例讲述了ThinkPHP中使用ajax接收json数据的方法.分享给大家供大家参考.具体分析如下: 这里通过ThinkPHP+jquery实现ajax,扩展了下,写了个查询,前台代码如下: 首先需要引入jquery.js,主要代码如下: 复制代码 代码如下: function ajax(id,pic){     //由于ThinkPHP不解析JavaScript里的ThinkPHP常量,所以需要先在这里定义. var URL='__URL__';         $.ajax({     

  • 解决Nginx 配置 proxy_pass 后 返回404问题

    一. Nginx 配置 proxy_pass 后 返回404问题 故障解决和定位 1.1. 问题 在一次生产涉及多次转发的配置中, 需求是下面的图: 在配置好了 proxy_pass 之后,请求 www.djx.com 直接返回 404,没有什么其他的异常. 但是我们直接请求后端 www.baidu.com 是正常响应的.这就很怪异的. 看日志请求也是转发到了 www.baidu.com 的.但是请求响应就是404. 1.2. 寻找问题原因 我们的默认的 Nginx的 proxy_set_hea

  • jackson在springboot中的使用方式-自定义参数转换器

    目录 springboot jackson使用-自定义参数转换器 要实现的功能 思路 关键代码 Jackson自定义转换器 @JsonDeserialize注解源码 以日期类型为例 自定义转换方法 springboot jackson使用-自定义参数转换器 springboot中默认使用jackson,且实现了很多参数转换器,其中就有EnumToStringConverter和StringToEnumConverterFactory,用于字符串和枚举的互转.但是是根据枚举名称互转. 要实现的功能

  • Springboot中如何自动转JSON输出

    目录 Springboot是如此的暴力 原因 Springboot自动转json的出现问题 问题复现 问题分析及解决办法 Springboot是如此的暴力 在Controller中注解为@RestController类.@GetMapping或其他Mapping注解方法后 会自动转成JSON格式… 后台打印 {msg=已查询到163条数据, data_size=163, code=0, data=[Tersga{aname='万家铺村', sum=10, run=10, down=0, req=

  • C语言中数组作为函数的参数以及返回值的使用简单入门

    函数通过数组作为参数 如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收.类似的方式,可以使用多维数组形式参数. 方式-1 形式参数为指针如下.在下一章将学习什么是指针. void myFunction(int *param) { . . . } 方式-2 如下形式数组参数的大小: void myFunction(int param[10]) { . . . } 方式-3 如下形式

  • SpringBoot 中使用 Validation 校验参数的方法详解

    目录 1. Validation 介绍 1.1 Validation 注解 1.2 @valid 和 @validated的区别 2. SpringBoot 中使用 Validator 校验参数 2.1 依赖引入 2.2 标注校验实体类 2.3 开启参数校验 2.3.1 简单参数校验 2.3.2 JavaBean 校验 2.4 捕捉参数校验异常 项目中写逻辑时,为保证程序的健壮性,需要对各种参数进行判断,这就导致业务代码不只健壮,还十分臃肿.其实 SpringBoot 中已经提供了 Valida

  • SpringBoot过滤器如何获取POST请求的JSON参数

    目录 SpringBoot过滤器获取POST请求的JSON参数 想到了使用过滤器来实现这个功能 所以我们可以通过获取到输入流来获取body 从源码我们可以看到 我们创建一个类并继承这个包装类 有一点需要注意的 SpringBoot过滤器获取POST请求的JSON参数 项目中需要将每个请求的路径和请求参数以及响应结果,都记录在日志中,这样在出现问题时可以快速定位是哪里出现了问题. 想到了使用过滤器来实现这个功能 当请求来到过滤器时,会有一个Request参数,通过该参数就能获取到请求路径和请求参数

随机推荐