首页 热点 业界 科技快讯 数码 电子消费 通信 前沿动态 电商

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

2022-05-07 11:14:56 来源 : 软件开发网

目录

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件开发网。

标签: 问题描述 支持软件 希望大家

相关文章

最近更新
观焦点:超萌相机 2023-03-01 12:29:37
海南百货网 2023-03-01 12:13:44
焦点热讯:宜点充 2023-02-28 10:10:16
天天关注:小铺CEO 2023-02-28 10:07:13
【世界聚看点】KaFit 2023-02-28 09:31:37
葱天下 2023-02-28 09:17:03
渔界竞钓 2023-02-28 08:15:29
焦点快看:鲸奇视频 2023-02-28 06:30:37
环球热议:萝小逗 2023-02-27 23:25:49
简讯:小码公交 2023-02-27 23:16:12
彼岸花 2023-02-27 22:32:52
时时夺宝 2023-02-27 21:37:50
天天动态:袜之源 2023-02-27 21:29:50
天天资讯:AI空气 2023-02-27 20:19:46
世界时讯:绘读 2023-02-27 20:19:41
看点:一元得购 2023-02-27 19:26:28