簡體   English   中英

從java類調用控制器方法

[英]Invoke controller method from java class

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

以下是我的控制器及其方法。

@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類調用這個控制器方法。 我怎樣才能使它工作? 請建議..

簡短的回答:是的,這是可能的。 在你的其他類/線程中,你可以做到

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

但是 ,請記住,您的設置非常不尋常,並且所有自動連接的字段都無法正確連接。 如果從上下文中獲取控制器,則可以正確連接/注入字段:

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

或者你可以在你的其他課堂上:

@Autowired private TestResultUploadController controller;

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

同樣,這是非常不尋常的,但很有可能。 但是,只是因為有可能做某事,並不意味着你應該這樣做。 我建議使用更常見的Spring / MVC方法,將業務邏輯外包給Services。 基本上,有這樣的事情:

@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);

這樣,您就可以在控制器的測試中模擬UploadTestResultService,並且您還可以自己測試該服務的uploadTestResult方法,而不需要在控制器中。

編輯:如何獲取Spring上下文超出了本問題的范圍。 我假設你知道基本的Spring和基本的java。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM