【问题标题】:How can i pass two params @Path and @PathParam我如何传递两个参数@Path 和@PathParam
【发布时间】:2018-07-08 02:21:44
【问题描述】:

我正在尝试使用 java angular js 和 mysql 创建身份验证方法。我知道如何传递一个参数,但我无法传递两个参数,请您帮帮我。

这是我的 DAO 方法:

public Client authentifier(int numerocompte,String mdp) {

            System.out.println(numerocompte + mdp);

            try {
            Connection con = Connexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from client WHERE numerocompte = ? AND mdp = ?");
            ps.setInt(1, numerocompte);
            ps.setString(2, mdp);
            Client e = new Client();
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {

                e.setIdclient(rs.getInt("idclient"));
                e.setNomcomplet(rs.getString("nomcomplet"));
                e.setMail(rs.getString("mail"));
                e.setNumerocompte(rs.getInt("numerocompte"));
                e.setMdp(rs.getString("mdp"));

            }
            rs.close();
            return e;

            }catch (Exception e) {
                System.out.println("Erreur avec  authentifier() -->" + e.getMessage());
                return (null);
            }

        }

这是我想要传递 2 个参数的控制器方法:

@GET
    @Path("authentifier/{numerocompte}{mdp}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Client authentifier(@PathParam("numerocompte , mdp") int numerocompte, String mdp) {
        ClientDao dao = new ClientDao();
        System.out.println(numerocompte);
        return dao.authentifier(numerocompte,mdp);
    }

这里是有角度的 js 行,我也将在其中传递 2 个参数:

$http.get('rest/client/authentifier/'+$scope.nouveauClient.numerocompte+$scope.nouveauClient.mdp).then(function(data){
                 alert(data.data);
                })

【问题讨论】:

    标签: javascript java angularjs spring spring-mvc


    【解决方案1】:

    您忘记在@Pathannotation 中添加numerocomptemdp 之间的斜线。

    您的authentifier 函数应如下所示

    @GET
    @Path("authentifier/{numerocompte}/{mdp}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Client authentifier(@PathParam("numerocompte") int numerocompte, @PathParam("mdp") String mdp) {
        ...
    }
    

    在您的 Angular 代码中也是如此

    $http.get('rest/client/authentifier/'+$scope.nouveauClient.numerocompte+'/'+$scope.nouveauClient.mdp).then(function(data) { alert(data.data); })
    

    【讨论】:

      【解决方案2】:

      只需在控制器方法的签名中添加一个@PathParam("mdp") 注释即可。

      @GET
      @Path("authentifier/{numerocompte}/{mdp}")
      @Consumes(MediaType.APPLICATION_JSON)
      @Produces(MediaType.APPLICATION_JSON)
      public Client authentifier(@PathParam("numerocompte") int numerocompte, 
                                 @PathParam("mdp") String mdp) {
      
          ClientDao dao = new ClientDao();
          System.out.println(numerocompte);
          return dao.authentifier(numerocompte,mdp);
      }
      

      此外,请确保正确指定路径。在您的示例中,您声明了

      @Path("authentifier/{numerocompte}{mdp}")
      

      JAX-RS 将无法知道numerocompte 的起点和终点。像这样把它们分开

      @Path("authentifier/{numerocompte}/{mdp}")
      

      然后

      $http.get('rest/client/authentifier/'+$scope.nouveauClient.numerocompte+'/'+$scope.nouveauClient.mdp).then(function(data){
                   alert(data.data);
      })
      

      【讨论】:

        【解决方案3】:

        为每个方法参数添加一个@PathParam("pathParamName")

        public Client authentifier(
            @PathParam("numerocompte") int numerocompte, 
            @PathParam("mdp") String mdp
        )
        

        并确保您遵循指定的路径。

        【讨论】:

          猜你喜欢
          • 2012-06-23
          • 2020-08-18
          • 2019-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-26
          • 1970-01-01
          相关资源
          最近更新 更多