java - 从java类调用 Controller 方法

标签 java spring-mvc

I just want to know whether controller class method is accessible from another java class.    

以下是我的 Controller 及其方法。

@Controller
public class TestResultUploadController {
    @RequestMapping(method = RequestMethod.POST,value="/uploadTestResult")  
    public @ResponseBody  
     String uploadTestResult(String testResultBarcode,int deviceLoc) {

         //some code goes here
    return something;
}

我只想从另一个 java 类调用这个 Controller 方法。 我怎样才能让它发挥作用? 请建议..

最佳答案

简短回答:是的,这是可能的。在你的其他类(class)/线程中,你可以做

// this will create a new instance of that controller where no fields are wired/injected
TestResultUploadController controller = new TestResultUploadController();
controller.uploadTestResult("someString", 1234); 

但是,请记住,您的设置非常不寻常,您所有的 Autowiring 字段都不会正确装配。如果您从上下文中获取您的 Controller ,您将能够正确连接/注入(inject)您的字段:

// obtain controller bean from context, should have fields wired properly
TestResultUploadController controller = ctx.getBean(TestResultUploadController.class);
controller.uploadTestResult("someString", 1234); 

或者你可以,在你的其他类(class),有:

@Autowired private TestResultUploadController controller;

....
public void doStuff(){
    controller.uploadTestResult("someString", 1234); 
}

同样,这非常不寻常,但很有可能。但是,仅仅因为有可能做某事,并不意味着你应该去做。我会推荐更常见的 Spring/MVC 方法,在这种方法中,您将业务逻辑外包给服务。基本上,要有这样的东西:

@Controller
public class TestResultUploadController {

    @Autowired private UploadTestResultService uploadTestResultService;

    @RequestMapping(method = RequestMethod.POST,value="/uploadTestResult")  
    public @ResponseBody String uploadTestResult(String testResultBarcode,int deviceLoc) {
        return uploadTestResultService.uploadTestResult(testResultBarcode, deviceLoc);
    }
}

在你的话题中:

//somehow get the service
UploadTestResultService uploadTestResultService = //somehowGetTheService (whether from context or in some other way)
uploadTestResultService.uploadTestResult(testResultBarcode, deviceLoc);

这样,您就可以在 Controller 的测试中模拟 UploadTestResultService,并且您还可以在不在 Controller 中的情况下自行测试该服务的 uploadTestResult 方法。

编辑: 如何获取 Spring 上下文不在本题讨论范围之内。我假设您了解基本的 Spring 和基本的 java。

关于java - 从java类调用 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20374972/

相关文章:

java - 使用 Virtual Box 在 Ubuntu 中运行 Java 类

java - 多个 QueueConnectionFactory 上的异常

java - 将 .dll 捆绑在 .jar 内

java - 我怎样才能转到 :text in Thymleaf? 内的下一行

java - SpringMVC请求参数的值

java - Spring Boot 调度程序 servlet 无法查找/映射静态内容

java - 在 Windows 中的 Tomcat 7 上安装 PHP

java - Hibernate + Spring + 持久一对一关系 + 空外键

mysql - spring-mvc 和 hibernate 与 mysql 数据库集成

java - Spring Security 自定义过滤器