Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何在底层处理HTTP方法?_Java_Annotations_Abstract Class_Abstract_Undertow - Fatal编程技术网

Java 我如何在底层处理HTTP方法?

Java 我如何在底层处理HTTP方法?,java,annotations,abstract-class,abstract,undertow,Java,Annotations,Abstract Class,Abstract,Undertow,所以我决定开始使用Undertow,这既是一个实验,也是因为它在基准测试中取得了很好的结果。虽然我认为这很神奇,但有一个功能要么缺失,要么找不到 我想开发一个RESTful web服务,因此识别调用哪个HTTP方法对我来说很重要。现在,我可以从HttpServerExchange参数中的RequestMethod中获取此信息,但如果必须这样做,则每个处理程序都会变得单调乏味 我的解决方案可行,但我知道是错误的,它是: 创建了名为HTTPMethod的注释接口: @Retention(Retent

所以我决定开始使用Undertow,这既是一个实验,也是因为它在基准测试中取得了很好的结果。虽然我认为这很神奇,但有一个功能要么缺失,要么找不到

我想开发一个RESTful web服务,因此识别调用哪个HTTP方法对我来说很重要。现在,我可以从HttpServerExchange参数中的RequestMethod中获取此信息,但如果必须这样做,则每个处理程序都会变得单调乏味

我的解决方案可行,但我知道是错误的,它是:

创建了名为HTTPMethod的注释接口:

@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");      
}