Srping MVC中Controller的void方法声明误区

Srping MVC中Controller的void方法声明误区

Controller中定义void方法,这种场景一般是通过HttpServletResponse对象来输出页面内容。注意:Controller的void方法中一定要声明HttpServletResponse类型的方法入参!
void方法不定义HttpServletResponse类型的入参,HttpServletResponse对象通过RequestContextHolder上下文获取,这种方式是不可行的,
void方法不定义HttpServletResponse类型的入参,Spring MVC会认为@RequestMapping注解中指定的路径就是要返回的视图name
页面上访问 http://127.0.0.1:8080/MavenSpringMvcDemo/voidMethod/demo2,接着会将
http://127.0.0.1:8080/MavenSpringMvcDemo/jsp/voidMethod/demo2.jsp 作为此次请求的响应内容,如果这个jsp文件项目中不存在则报错

例子:
Controller

@PostMapping("/appreciate")//点赞功能
public void appreciate(@RequestParam(value = "isAppreciate") Boolean isAppreciate, @RequestParam(value="blogId") Long blogId){
    Blog blog = blogService.findById(blogId);
    if (isAppreciate){//点赞  数据库appreciateNum+1
        blog.setAppreciateNum(blog.getAppreciateNum()+1);
    }else{//取消点赞    数据库appreciateNum-1
        blog.setAppreciateNum(blog.getAppreciateNum()-1);
    }
    blogService.updateAppreciateNum(blog);
}

错误
在这里插入图片描述
因为上面说的用了void方法之后会把RequestMapping的路劲当成页面返回,所以就会报template中没有找到/blogDetail/appreciate页面的错误

更改
将void方法换成String方法
因为前段的请求是ajax的post请求,所以返回一个String然后到前端console.log(data)更好
Controller

@PostMapping("/appreciate")//点赞功能
@ResponseBody
public String appreciate(@RequestParam(value = "isAppreciate") Boolean isAppreciate, @RequestParam(value="blogId") Long blogId){
    Blog blog = blogService.findById(blogId);
    if (isAppreciate){//点赞  数据库appreciateNum+1
        blog.setAppreciateNum(blog.getAppreciateNum()+1);
    }else{//取消点赞    数据库appreciateNum-1
        blog.setAppreciateNum(blog.getAppreciateNum()-1);
    }
    blogService.updateAppreciateNum(blog);
    return "更新成功!";
}

JS

function appreciate(){//点赞功能数据库appreciateNum+1
    var isAppreciate = $("#dianzan-btn").hasClass('red')?'true':'false';
    console.log(isAppreciate);
    var blogId = $("#blogId").val();
    console.log(blogId);
    var adata = {
        "isAppreciate":isAppreciate,
        "blogId":blogId
    };
    $.ajax({
        url : "/blog/blogDetail/appreciate",     //请求的url。与后端@Request Mapping注解中的值一致。   注意:/blog前缀是项目名一定要加上
        type : "post",//通过post方式上传请求
        // contentType : "application/json",//上传内容格式为json结构
        data : adata,                               //上传的参数
        async: true,                   //默认为true异步,false表示同步,异步不需要等待,同步需要等待回调方法做完
        success : function(data) {          //请求成功的回调函数
            console.log(data);
        },
        error : function(e) {           //请求失败的回调函数
            console.log(e);
        }
    })
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值