Spring 弹簧第一层和第二层自动布线
我有一个场景,其中我的ServiceImpl和Business类实现了相同的接口。但是我无法自动连接它们Spring 弹簧第一层和第二层自动布线,spring,Spring,我有一个场景,其中我的ServiceImpl和Business类实现了相同的接口。但是我无法自动连接它们 @RestController @RequestMapping("/myservice") public interface myInterface{ @RequestMapping(value="/getSomething/{input}", method=RequestMethod.GET) doSomething(String input);
@RestController
@RequestMapping("/myservice")
public interface myInterface{
@RequestMapping(value="/getSomething/{input}", method=RequestMethod.GET)
doSomething(String input);
}
现在我有两个实现相同接口的类
@Component
@Qualifier("doSomethingImpl")
public class DoSomethingImpl implements myInterface{
@Autowired
@Qualifier("businessLayer")
myInterface businessLayer;
doSomething(@PathVariable String input){
//my logic here
}
}
@Component
@Qualifier("businessLayer")
public class BusinessLayer implements myInterface{
doSomething(@PathVariable String input){
//my logic here
}
}
现在,当我在服务器上运行它时,我得到以下错误
无法将处理程序“DoSomethingImpl”映射到URL路径
[/myservice/getSomething/{input}]:已存在类型为的处理程序
[class com.mypackage.business.BusinessLayer]已映射
有人能帮我解决这个错误吗?问题是两个控制器都映射到同一路径。我建议您将代码更改为:
public interface myInterface{
@RequestMapping(value="/getSomething/{input}", method=RequestMethod.GET)
public Whatever doSomething(String input) {
//whatever
}
}
@RequestMapping("something")
@RestController
public class DoSomethingImpl implements myInterface{
}
@RequestMapping("somethingElse")
@RestController
public class BusinessLayer implements myInterface{
}
DoSomethingImpl是服务层,所有我的请求映射都将在其中实现。业务层用于具有相同方法集的业务逻辑。在这种情况下,我如何自动连接我的业务层以从DoSomethingImpl调用。如果
DoSomethingImpl
是一个服务,它不应该是一个RestController
,也不应该实现接口。是的,在Impl类上有请求映射是有意义的。这是我的错。。。无论如何,感谢它现在可以工作了。如前所述,这不是布线问题,但您几乎不应该在多个级别实现同一接口,因为方法调用的含义通常是不同的。