想问问RequestMapping能找到controller,但controller中的方法却不起作用

我想在页面实现人脸识别,成功后登陆
这是我jsp中的代码

                    <iframe  width=0 height=0 frameborder=0 id="myiframe" name="myiframe"></iframe>
                            <a href="${pageContext.request.contextPath}/user/checkface"> <button id="camera">人脸登录</button></a>
                    <button  class="sui-btn btn-block btn-xlarge btn-danger">摄像头</button>

这是我controller中的代码

 @ResponseBody
    @RequestMapping("/checkface")
    public String checkface1() {
        Integer count = userService.checkface();
        if (count > 0) {
            return"redirect:/admin/main.jsp";
        } else {
            return "redirect:/admin/main.jsp";
        }
    }

这是我service中的代码

 @Override
    public Integer checkface() {
      com.itheima.controller.test.face();
        String m= com.itheima.controller.test.txt2String1();
        return userMapper.checkface(m);
    }

这是操作数据库的代码

@Select("select count(user_facename) from user where user_facename=#{facename}")

    Integer checkface(String m);

其中test中的代码是这个

package com.itheima.controller;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class test {
    public static void main(String[] args) {
        face();
        System.out.println(txt2String1());
    }

public static String txt2String1(){                         //输出检测出来的人脸名字的缩写
        File file = new File("D:\\FaceRecognition\\InsightFacePytorch\\data\\facebank\\number.npy");
        StringBuilder result = new StringBuilder();
        try{
            // 构造一个BufferedReader类来读取文件
            BufferedReader br = new BufferedReader(new FileReader(file));
            String s = null;
            int i=0;
            // 使用readLine方法,一次读一行
            while((s = br.readLine())!=null){
                if(i==1){
                    System.out.println(s);
                }
                i++;
            }
            br.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return result.toString();
    }

public  static  void face(){
    Process proc;
    String compiler = "python ";
    String rootPath = "D:\\FaceRecognition\\InsightFacePytorch\\";   //人脸识别的python代码
    String program = "face_verify.py";
    try{
        String commond = "cmd /c "+compiler+" "+rootPath+program;
        proc = Runtime.getRuntime().exec(commond);
        proc.waitFor();
}
    catch(Exception e){
        e.printStackTrace();
    }
}
}

单独测试test是可以成功的

img

但是我在页面点击人脸登录按钮时会出现上面截图的样子,不会报错但是也不会执行
想问问怎么样才能让它成功实现人脸识别登录

debug调试看看或者加点日志方便排查问题
接口上加@ResponseBody注解,方法返回的是json字符串,需要返回视图的话,就不用加这个注解。

    @RequestMapping("/checkface")
    public String checkface1() {
        Integer count = userService.checkface();
        if (count > 0) {
            return"redirect:/admin/main.jsp";
        } else {
            return "redirect:/admin/main.jsp";
        }
    }

想问问现在我的按钮中加的有这个

img


我点击人脸识别的按钮,链接转到/user/checkface时,我的摄像头会闪一下,因为人脸识python别我用的是老师给的Insight_FacePytorch包里的

img


这个里面也有打开摄像头功能,是这两个冲突造成的吗,怎么样才能让摄像头成功开启实现人脸识别

@ResponseBody 注解是用于将Controller方法返回的对象,通过适当的转换器转换为指定格式后,写入到Response对象的body区,通常用于返回JSON格式的数据。因此,使用@ResponseBody注解返回的是数据,而不是页面。如果需要返回页面,应该使用其他注解或方法来实现,例如使用@Controller注解并返回视图名,或使用重定向等方式跳转到指定页面。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

根据你提供的信息,可能存在以下几个问题:

  1. checkface1()方法中,你使用了@ResponseBody注解,但是却返回了一个重定向的地址,这可能导致前端页面无法正常跳转。如果你想要进行页面跳转,应该去掉@ResponseBody注解,并直接返回重定向的地址,例如:

    @RequestMapping("/checkface")
    public String checkface1() {
        Integer count = userService.checkface();
        if (count > 0) {
            return "redirect:/admin/main.jsp";
        } else {
            return "redirect:/admin/main.jsp";
        }
    }
    
  2. checkface1()方法中,你调用了userService.checkface()方法,该方法内部又调用了com.itheima.controller.test.face()com.itheima.controller.test.txt2String1()方法,这两个方法都是静态方法,可能会导致并发问题。建议将这两个方法改为非静态方法,并将它们放到一个类中,然后在userService.checkface()方法中创建该类的对象,再调用其中的方法,例如:

    public class FaceRecognition {
        public void face() {
            // ...
        }
    
        public String txt2String1() {
            // ...
        }
    }
    
    public class UserServiceImpl implements UserService {
        @Override
        public Integer checkface() {
            FaceRecognition fr = new FaceRecognition();
            fr.face();
            String m = fr.txt2String1();
            return userMapper.checkface(m);
        }
    }
    

    这样可以避免可能存在的并发问题。

  3. checkface1()方法中,你调用了userService.checkface()方法,该方法内部会进行数据库操作。建议在数据库操作前,先确认数据库连接是否正常,以及SQL语句是否正确,如果存在问题,需要对其进行修复。另外,如果数据库操作失败,应该抛出异常并进行相应的处理,以便及时发现和解决问题。

希望以上建议能对你有所帮助。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

根据您提供的代码和描述,可能存在以下问题导致人脸识别登录无法成功实现:

  1. 页面中的人脸登录按钮没有设置点击事件或触发人脸识别的操作。请确保按钮的点击事件被正确绑定,并在点击按钮时触发人脸识别的功能。
  2. checkface1() 方法中使用了 @ResponseBody 注解,该注解通常用于返回 JSON 或 XML 数据,而不是重定向页面。考虑将返回类型改为 String 并使用 return "admin/main.jsp" 来实现重定向。
  3. userService.checkface() 方法中调用了 com.itheima.controller.test.face()com.itheima.controller.test.txt2String1() 方法,但没有提供这两个方法的实现代码。请确保这两个方法能够正常执行,并且返回预期的结果。
  4. 确保相关的文件路径和目录存在且正确。例如,在 txt2String1() 方法中,检查 D:\\FaceRecognition\\InsightFacePytorch\\data\\facebank\\number.npy 文件是否存在,并且具有正确的读取权限。

请检查以上几点,并确保代码中的所有依赖关系和配置项都正确设置。如果问题仍然存在,请尝试调试代码,检查日志输出或添加调试语句以进一步定位问题所在。

可以远程吗?