我的控制器中有两种方法:
他们都有@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);
}
}
答案 0 :(得分:0)
使用@RequestMappings
注释的控制器方法必须是公开的才能正常工作。没有理由将请求方法设置为私有,因为你不应该自己从不同的组件调用控制器方法。
答案 1 :(得分:0)
再次如果您不想调用它,那么声明它的优势是什么,由于私有性质以及无意调用的控制器方法,您无法从任何其他类调用它其他课程,你不想从浏览器调用它,因为你将无法。
那么你如何在flowService
方法中测试query2
是否为空,因为你不会从任何地方调用它?
但是,你的问题没有处理这个私有和公共控制器方法,它是另一回事,因为flowService
是一个实例变量,如果query1
方法能够访问它,那么{ {1}}也应该这样做。
答案 2 :(得分:0)
Spring MVC控制器适用于任何范围:public
,private
,protected
或包私有访问修饰符。
您可以使用此样本控制器对其进行验证:
@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()
)。