Spring PUT没有映射到方法

时间:2015-01-13 12:39:46

标签: java spring

奇怪的是我的PUT操作没有映射到spring方法,我跟着类......

@Controller
@RequestMapping(value = { "/**/applicationContext/abcde" })
public abstract class AbstractController { 
  // Exception handlers
}

此类由另一个抽象类扩展,如下所示

public abstract class AbstractAdapter extends AbstractController{}

最后,上面的课程由以下课程

扩展
public class SpringAdapter extends AbstractAdapter implements MyInterface{}

我已经制作了一些操作,如下所示: -

@Override
@ResponseBody
@RequestMapping(method = { RequestMethod.PUT }, consumes = "application/x-www-form-urlencoded",     produces = "application/xml", params = {
        "param1=some_value", param2 })
public MyObject update(
        @RequestParam(value = param2, required = true) @ContentType(value = Encoding.XML)     MyObejct myObject, HttpServletRequest request) throws Exception{ }

但是当我调用put方法时,请求没有映射到我的更新方法。 任何人都可以帮忙。

1 个答案:

答案 0 :(得分:2)

您的子类未标记为@Controller,因此Spring(扫描控制器时)找不到它。

请参阅this answer

基本上,默认情况下不会继承注释。 您可以在注释声明中使用注释将其标记为已继承as is shown here 使用:

public @interface Inherited

但是如果你看一下the controller source,那么这个关键字就不会在Controller实现spring使用中使用。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

所以我认为@Controller不会在你的情况下继承。我将首先尝试使用一个简单的例子继承(类A扩展类B,只有一个简单的简单方法)来验证这一点。