web-dev-qa-db-ja.com

リソースモデルには、HTTPメソッドGETのあいまいな(サブ)リソースメソッドがあり、「@ Consumes」および「@Produces」アノテーションで定義されたMIMEタイプを入力します。

URLが異なる場合、次のようにしてこのエラーをどのように生成できますか?

@Path("/job/{empId}/empProfile")
public EmpProfileResource delegateToEventProfileResource() {
    EmpProfileResource resource = new EmpProfileResource();
    locator.inject(resource);
    return resource;
}

@Path("/job/{empId}/empTask")
public EmpTaskResource getClientLevelAttendees(@PathParam("clientId") long clientId){
    EmpTaskResource resource = new EmpTaskResource (empId);
    locator.inject(resource);
    return resource;
}


@Path("/")
public class EmpTaskResource{
}
@Path("/")
public class EmpProfileResource{
}

はい、どちらもGETで同じものを生成するので、?

@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })

エラー:

[[致命的]リソースモデルには、HTTPメソッドGETのあいまいな(サブ)リソースメソッドがあり、 "@ Consumes"および "@Produces"アノテーションで定義されているMIMEタイプをJava method publicで定義されています。 javax.ws.rs.core.Response com.EmpTaskResource.getEmpTasks(Java.time.LocalDate、Java.time.LocalDate、Java.lang.String)およびpublic javax.ws.rs.core.Response com.EmpProfileResource.getEmpProfiles( long、Java.lang.String)は正規表現に一致します/。これらの2つのメソッドはまったく同じMIMEタイプを生成および消費するため、リソースメソッドとしての呼び出しは常に失敗します。;

10
shep

サブリソースクラスから@Path("/")を削除します。サブリソースクラスはそれらを必要としません。そして、それらがある場合、_@Path_注釈付きクラスをスキャンしている場合、それらはルートリソースクラスとして追加されます。そしてこれが問題です。サブリソースクラスのメソッドは示していませんが、ルートパスが同じであるため、いくつかの重複するメソッドが原因で問題が発生していると思います。したがって、サブリソースクラスの@Path("/")を削除するだけで問題ありません。

9
Paul Samsotha

同じエラーが発生しました。ほとんどの人は、どこにでもあるので@Pathアノテーションを変更することでエラーを解決しました。私の場合、何か違うことが起こりました。たとえば、パッケージをaaaからbbbに変更しました。なんらかの理由で、aaaとbbbの両方のパッケージがあるサーバーにデプロイされたアーティファクトで、複製されたリソースとサーバーが例外を発生させました。以前にデプロイしたアーティファクトをクリアして、新しいものをデプロイする必要がありました。エラーが表示される場所でも、誰かがこのケースを確認する可能性があります。もちろん、結局のところ、理由は再び遍在する道です。同じ問題で苦しんでいますが、バージョンチェックも更新しましたが、ジャージーフレームの動作がこれをサポートしていない可能性があるため、同じ問題が発生します。

このエラーは、サービスクラスで@Pathではなく@PathParamを記述した場合、または同じパスを定義している場合に発生します。

0
rishabh

私は今このエラーを2回受けました。両方が異なっていました:

初回上記のGETおよびPOSTメソッドなどで取得しました。

@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})

しかし、私はそれをクラスの前に持っていませんでした。したがって、次のような異なるクラスリソースがある場合:

@Path("/users") 
public Class User{}

そして

@Path("/lists")
public Class List{}

次に、それらの両方が必要です

@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})

彼らの前では:

@Path("/users")
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON}) 
public Class User{}

2回目リソース(エンドポイント)クラスをあるフォルダーから別のフォルダーに(Intellijからのリファクタリングを介して)移動しましたが、IDEはこれを認識しません。 Panagiotis Piperopoulosがすでに説明した正確な問題が発生します。

それを修正するために、私は次のことを行いました:プロジェクトが配置されているフォルダー(<working_directory>)に移動します。そこにターゲットというフォルダがあります(<working_directory>\target

私の場合は1でした:warファイル。それを削除します。

2:meta-inf、web-inf、index.htmlを含むフォルダー。名前はおそらくあなたのモジュール名です(IntelliJでは:ファイル->プロジェクト構造->モジュール)。そのフォルダの名前を<old_name>_oldなどに変更します

コードを再コンパイルすると、フォルダーと新しい.warファイルが表示されます。

0
Zybrion