Spring PUT 未映射到方法
Spring PUT not mapping to method
奇怪的是我的 PUT 操作没有映射到 spring 方法,我遵循 classes...
@Controller
@RequestMapping(value = { "/**/applicationContext/abcde" })
public abstract class AbstractController {
// Exception handlers
}
这个class被另一个摘要class扩展,如下
public abstract class AbstractAdapter extends AbstractController{}
最后,上面 class 由下面 class
扩展
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 方法时,请求没有映射到我的更新方法。
有谁能帮忙吗
你的子class没有被标记为@Controller,因此Spring(当它扫描控制器时)没有找到它。
请参阅this answer
基本上,默认情况下不继承注释。
可以在注解的声明中使用注解来标记为继承as is shown here
通过使用:
public @interface Inherited
但如果您查看 the controller source,此关键字未在控制器实现中使用 spring 使用。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
所以我假设 @Controller 在你的情况下没有被继承。我首先会用一个简单的例子来尝试继承(class A extends class B ,只是一个简单的朴素方法)来验证这一点。
奇怪的是我的 PUT 操作没有映射到 spring 方法,我遵循 classes...
@Controller
@RequestMapping(value = { "/**/applicationContext/abcde" })
public abstract class AbstractController {
// Exception handlers
}
这个class被另一个摘要class扩展,如下
public abstract class AbstractAdapter extends AbstractController{}
最后,上面 class 由下面 class
扩展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 方法时,请求没有映射到我的更新方法。 有谁能帮忙吗
你的子class没有被标记为@Controller,因此Spring(当它扫描控制器时)没有找到它。
请参阅this answer
基本上,默认情况下不继承注释。 可以在注解的声明中使用注解来标记为继承as is shown here 通过使用:
public @interface Inherited
但如果您查看 the controller source,此关键字未在控制器实现中使用 spring 使用。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
所以我假设 @Controller 在你的情况下没有被继承。我首先会用一个简单的例子来尝试继承(class A extends class B ,只是一个简单的朴素方法)来验证这一点。