springmvc的私有方法

时间:2017-10-11 09:39:42

标签: java spring-mvc

我的控制器中有两种方法:

  1. 公共方法
  2. 私人方法
  3. 他们都有@requestMapping,他们都引用了一个全局变量(@autowrite)。问题是变量的第一个方法有值,第二个方法变量是null。

    请帮帮我。

        /** 
          * Both of these methods are accessible through the browser, 
          * when i ask for query1 the flowService has value but  
          * when i ask for query2 the flowService is null. 
          * My spring version is 4.2.4 
          * Created by hanxiaofei on 2017/10/12. 
          */
       public class TestController {    
           @Autowired    
           private FlowService flowService;  
    
           @RequestMapping(value = {"/query1"})    
           @ResponseBody    
           public CommonListResult<WorkOrderMO> query1() {
            return flowService.queryWorkOrderList(1);    
           } 
    
           @RequestMapping(value = {"/query2"})
           @ResponseBody
        private CommonListResult<WorkOrderMO> query2() {
            return flowService.queryWorkOrderList(1);
        }
    }
    

3 个答案:

答案 0 :(得分:0)

使用@RequestMappings注释的控制器方法必须是公开的才能正常工作。没有理由将请求方法设置为私有,因为你不应该自己从不同的组件调用控制器方法。

答案 1 :(得分:0)

再次如果您不想调用它,那么声明它的优势是什么,由于私有性质以及无意调用的控制器方法,您无法从任何其他类调用它其他课程,你不想从浏览器调用它,因为你将无法。

那么你如何在flowService方法中测试query2是否为空,因为你不会从任何地方调用它?

但是,你的问题没有处理这个私有和公共控制器方法,它是另一回事,因为flowService是一个实例变量,如果query1方法能够访问它,那么{ {1}}也应该这样做。

答案 2 :(得分:0)

Spring MVC控制器适用于任何范围:publicprivateprotected或包私有访问修饰符。

您可以使用此样本控制器对其进行验证:

@RestController
public class TestController {

    @Autowired
    private FlowService flowService;

    @RequestMapping("/query1")
    public List<String> query1() {
        return flowService.queryWorkOrderList(1);
    }

    @RequestMapping("/query2")
    private List<String> query2() {
        return flowService.queryWorkOrderList(2);
    }

    @RequestMapping("/query3")
    protected List<String> query3() {
        return flowService.queryWorkOrderList(3);
    }

    @RequestMapping("/query4")
    List<String> query4() {
        return flowService.queryWorkOrderList(4);
    }
}

我已经使用Spring Framework 4.3.11.RELEASE测试了它,所以首先尝试使用最新版本的问题。

据说,我不明白为什么有人想使用private控制器方法。 public最常用,但指定的范围不会缩短并产生相同的结果(在我的示例中为query4())。