tju*_*icz 2 java spring spring-mvc
为什么我必须@RequestParam在实现类而不是接口类上使用注释?我在单独的文件方法中使用接口和实现.似乎@RequestParamon接口的使用没有效果.
public interface GreetingService {
@RequestMapping(value = "/greeting", method = RequestMethod.GET)
public Greeting greetingByGet(@RequestParam(value="name", defaultValue="World") String name);
}
@RestController
public class GreetingController implements GreetingService {
@Override
public Greeting greetingByGet(
/**
* Why do I need to duplicate @RequestParam annotation on
* implementation to make it work ???
* Otherwise GET default value is not used.
*/
@RequestParam(value="name", defaultValue="World")
String name) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
它是有意义的注解像@Transactional这是实现特定的,但@RequestParam,@RequestBody等实现特定的?或者这是接口合同的一部分?@RequestBody(required)建议它是合同的一部分,因此应该支持在接口上使用它.
这里有一个解释:Spring MVC Annotated Controller Interface但问题是:这个解释背后是否有更一般的想法?或者只有Spring internals强迫我们像现在这样做?
很难理解为什么注释不会继承到实现.
Java不为接口上的注释提供继承,也不为方法或方法参数提供继承.虽然有一个@Inherited注释,但它仅适用于类级别,请参阅http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Inherited.html
所以这不是由于Spring或设计决策,而是由于Java语言设计.
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |