为什么我必须@RequestParam
在实现类而不是仅接口类上使用批注?我在单独的文件方法中使用接口和实现。似乎@RequestParam
on接口的使用没有效果。
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) {
...
}
}
它作出的注解一样感觉@Transactional
这是实现特定的,但@RequestParam
,@RequestBody
等实现特定的?还是这是接口合同的一部分?@RequestBody(required)
建议它是合同的一部分,因此应支持在接口上使用它。
这里有一个解释:Spring MVC带注释的控制器接口,但问题是:该解释背后是否有更一般的想法?还是只有Spring内部人员才能迫使我们像现在这样去做?
很难理解为什么注释不继承到实现中。
Java不为接口上的注释,方法或方法参数提供继承。尽管有@Inherited
注释,但它仅在类级别起作用,请参见http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Inherited.html
因此,这不是由于Spring或设计决策,而是与Java语言设计有关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句