2017-04-30 2 views
0

REST APIに2つのハンドラーを同じルートであるが異なる照会パラメーターで追加しようとしています。私は/getStudentsルートがすべての学生を返すようにしたいのに対し、/getStudents?studentName=SomeNameは与えられた学生の詳細だけを返すべきです。しかし、私がこれを実行するとき、私が/getStudentsルートに行っても、2番目の関数だけが実行されます。私は次のコードを持っています:2つのハンドラーを同じルートに別の照会パラメーターで登録する

@Produces(MediaType.APPLICATION_JSON) 
public class StudentService { 

    private StudentDAO studentDAO; 

    @GET 
    @Path("getStudents") 
    public List<Student> getStudents() { 
     return studentDAO.getStudents(); 
    } 

    @GET 
    @Path("getStudents") 
    public Student getStudentById(@QueryParam("studentName") String studentName) { 
     return studentDAO.getStudentsById(studentName); 
    } 

    public void setStudentDAO(StudentDAO studentDAO) { 
     this.studentDAO = studentDAO; 
    } 

    public StudentDAO getStudentDAO() { 
     return studentDAO; 
    } 

} 

私はJavaとJ2EEが初めてです。

答えて

1

を取得する必要がありますを意味し、あなたが一意にあなたのリソースを識別する必要がありますが、あなたが本当にそれをしたい場合は、注入することができ@同じパスのコンテキストで、クエリパラメータに基づいてすべての学生、またはただ1人の学生を返す:

@GET 
@Path("getStudents") 
public Response getStudents(@Context HttpServletRequest request){ 

      if (request.getParameterMap().isEmpty()) { 
       // return all students in Reponse 
      } else { 
       String queryParam = request.getQueryString(); 
       // check queryParam and return on student in Response 
      } 


    } 
1

次のようにgetStudentByIdを変更することができます:JAX-RSは、メソッド呼び出しを明確にすることができます

@GET 
@Path("getStudents/{studentName}") 
public Student getStudentById(@PathParam("studentName") String studentName) { 
    return studentDAO.getStudentsById(studentName); 
} 

を。

これは、クライアントが、私はスティーブに同意

http://somehost/somecontext/getStudents/Fred%20%Bloggs 

代わりの

http://somehost/somecontext/getStudents?studentName=Fred%20%Bloggs 
+0

ありがとうございます、buクエリパラメータを使用してそれを行う方法はありますか? – ayushgp

+0

JAX-RSを使用してこれを行うことはできません。 FWIW、英語では、@Path( "getStudents")が複数であるのとは対照的に、学生のIDが提供されたときに通常は '@Path(" getStudent ")'学生の)。 –

関連する問題