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

 更新时间:2022年05月06日 16:47:53   作者:陆沙  
这篇文章主要介绍了springboot中PostMapping正常接收json参数后返回404问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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实现类似 

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

相关文章

  • Java利用Optional解决空指针异常

    Java利用Optional解决空指针异常

    这篇文章主要介绍了Java利用Optional解决空指针异常,Optional 类是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空
    2022-09-09
  • 浅谈Java动态代理的实现

    浅谈Java动态代理的实现

    最近,小组同事做代码改造时,使用到了动态代理,自己阅读时,发现对代理这种设计模式都不怎么清楚,导致理解代码也很困难 自己唯一能看懂的,大概就是handler中的invoke方法 ,文中作出了非常详细的介绍,需要的朋友可以参考下
    2021-05-05
  • 新版SpringSecurity安全配置说明

    新版SpringSecurity安全配置说明

    这篇文章主要介绍了新版SpringSecurity安全配置说明,在 Spring Security 5.7.0-M2 中,我们弃用了WebSecurityConfigurerAdapter,因为我们鼓励用户转向基于组件的安全配置,需要的朋友可以参考下
    2023-07-07
  • 基于springboot创建mybatis的完整步骤

    基于springboot创建mybatis的完整步骤

    MyBatis是一款优秀的数据库持久层框架,相比Hibernate我更喜欢使用MyBatis,看的到SQL还是让人更安心点,这篇文章主要给大家介绍了关于基于springboot创建mybatis的完整步骤,需要的朋友可以参考下
    2024-03-03
  • 深入了解JVM字节码增强技术

    深入了解JVM字节码增强技术

    这篇文章主要介绍了深入了解JVM字节码增强技术,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • elasticsearch bucket 之rare terms聚合使用详解

    elasticsearch bucket 之rare terms聚合使用详解

    这篇文章主要为大家介绍了elasticsearch bucket 之rare terms聚合使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 基于Lucene的Java搜索服务器Elasticsearch安装使用教程

    基于Lucene的Java搜索服务器Elasticsearch安装使用教程

    Elasticsearch也是用Java开发的,并作为Apache许可条款下的开放源码发布,能够做到实时搜索,且稳定、可靠、快速,安装使用方便,这里我们就来看一下基于Lucene的Java搜索服务器Elasticsearch安装使用教程:
    2016-06-06
  • Java守护线程和用户线程的区别

    Java守护线程和用户线程的区别

    这篇文章主要介绍了Java守护线程和用户线程的区别,用户线程和守护线程,默认情况下我们创建的线程或线程池都是用户线程,所以用户线程也被称之为普通线程,下文更多详细内容需要的小伙伴可以参考一下
    2022-05-05
  • Java 泛型总结(一):基本用法与类型擦除

    Java 泛型总结(一):基本用法与类型擦除

    本文主要介绍了Java泛型的使用以及类型擦除相关的问题。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Java中用户线程与守护线程的使用区别

    Java中用户线程与守护线程的使用区别

    这篇文章主要介绍了Java中用户线程与守护线程的使用区别,Java语言中无论是线程还是线程池,默认都是用户线程,因此用户线程也被成为普通线程,下文关于其与守护线程的区别详情,需要的小伙伴可以参考一下
    2022-05-05

最新评论