Java 我如何在底层处理HTTP方法?
所以我决定开始使用Undertow,这既是一个实验,也是因为它在基准测试中取得了很好的结果。虽然我认为这很神奇,但有一个功能要么缺失,要么找不到 我想开发一个RESTful web服务,因此识别调用哪个HTTP方法对我来说很重要。现在,我可以从HttpServerExchange参数中的RequestMethod中获取此信息,但如果必须这样做,则每个处理程序都会变得单调乏味 我的解决方案可行,但我知道是错误的,它是: 创建了名为HTTPMethod的注释接口:Java 我如何在底层处理HTTP方法?,java,annotations,abstract-class,abstract,undertow,Java,Annotations,Abstract Class,Abstract,Undertow,所以我决定开始使用Undertow,这既是一个实验,也是因为它在基准测试中取得了很好的结果。虽然我认为这很神奇,但有一个功能要么缺失,要么找不到 我想开发一个RESTful web服务,因此识别调用哪个HTTP方法对我来说很重要。现在,我可以从HttpServerExchange参数中的RequestMethod中获取此信息,但如果必须这样做,则每个处理程序都会变得单调乏味 我的解决方案可行,但我知道是错误的,它是: 创建了名为HTTPMethod的注释接口: @Retention(Retent
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface HTTPMethod {
public enum Method {
OTHER, GET, PUT, POST, DELETE
}
Method method() default Method.OTHER;
“抽象”类(不是抽象的):
}
以及上述两项的实施:
public class ItemHandler extends RESTfulHandler{
@HTTPMethod(method=GET)
public List<String> getAllItems()
{
System.out.println("GET");
return new ArrayList<>();
}
@HTTPMethod(method=POST)
public void addItem()
{
System.out.println("POST");
}
@HTTPMethod
public void doNothing()
{
System.out.println("OTHERS");
}
public类ItemHandler扩展了RESTfulHandler{
@HTTPMethod(方法=GET)
公共列表getAllItems()
{
System.out.println(“GET”);
返回新的ArrayList();
}
@HTTPMethod(方法=POST)
公共无效附加项()
{
系统输出打印项次(“POST”);
}
@HTTPMethod
公共无效不做任何事()
{
系统输出打印项次(“其他”);
}
}
正如我所说的,它可以工作,但我确信抽象类及其实现缺少一些东西,因此它们可以正确地粘合。所以我的问题有两个:
1) 有没有更好/正确的方法来过滤底层的HTTP请求?
2) 在上述情况下,正确使用注释的正确方法是什么?在Redhat团队和Undertow贡献者的帮助下找到了几个答案,希望这对其他人有所帮助: 1) Undertow的最新版本有一个类,它执行与我建议的完全相同的操作,只是不需要注释 2) JBoss为RESTEasy提供了一个适配器:或者一个自定义框架,其中包括RESTEasy+Undertow+Weld 3) Undertow已经支持Servlets 3,所以如果您愿意,可以将它们组合起来使用注释
public class ItemHandler extends RESTfulHandler{
@HTTPMethod(method=GET)
public List<String> getAllItems()
{
System.out.println("GET");
return new ArrayList<>();
}
@HTTPMethod(method=POST)
public void addItem()
{
System.out.println("POST");
}
@HTTPMethod
public void doNothing()
{
System.out.println("OTHERS");
}