当前位置: 首页 > 知识库问答 >
问题:

如何避免在url构造中使用具有不同参数的多个方法

慕意致
2023-03-14
protected String invUrl() {
    return endpointUrl("invs", null, null);
}   

protected String invUrl(String id) {
    return endpointUrl("invs", id, null);
}   

protected String invUrl(String id, String action) {
    return endpointUrl("invs", id, action);
}   

protected String endpointUrl(String entity, String id, String action) {

    if (id != null && action != null) {
        return UriComponentsBuilder.newInstance().scheme("http").host("localhost").port(serverPort)
            .path("/mat/api/v1/" + entity + "/" + id + "/" + action).build().toUriString();
    } else if (id != null) {
        return UriComponentsBuilder.newInstance().scheme("http").host("localhost").port(serverPort)
            .path("/mat/api/v1/" + entity + "/" + id).build().toUriString();
    } else {
        return UriComponentsBuilder.newInstance().scheme("http").host("localhost").port(serverPort)
            .path("/mat/api/v1/" + entity).build().toUriString();
    }   
}

共有1个答案

杜轩昂
2023-03-14

创建一个名为endpoint的对象的方法之一,该对象保存所需的值:

public class Endpoint {
    private String entity;
    private String id;
    private String action;

    public Endpoint(String entity, String id, String action) {
        this.entity = entity;
        this.id = id;
        this.action = action;
    }

    // getters, toString etc.
}

则只能有一个INVURL方法,在该方法中构造此Endpoint对象并将其传递给EndpointURL方法:

protected String invUrl(String id, String action) {
        return endpointUrl(new Endpoint("invs", id, action));
    }

然后,endpointurl方法可以修改为:

protected String endpointUrl(Endpoint endpoint) {
        StringBuilder pathBuilder = new StringBuilder("/mat/api/v1/").append(endpoint.getEntity());
        if(endpoint.getId() != null) {
            pathBuilder.append("/").append(endpoint.getId());
        }
        if(endpoint.getAction() != null) {
            pathBuilder.append("/").append(endpoint.getAction());
        }
        return UriComponentsBuilder.newInstance().scheme("http").host("localhost").port(serverPort)
                .path(pathBuilder.toString()).build().toUriString();
    }
 类似资料:
  • 问题内容: 我有一个客户端库,在该客户端库中对我的REST服务进行http远程调用,然后返回给客户,该客户正在调用我的库,其中包含从REST服务获得的响应以及所有错误(如果包装了任何错误)围绕对象。 这是我的枚举类: 这是我的枚举类: 如您所见,在我的课堂上我有很多领域,因此我有一个很长的构造器,每次当我做一个对象的时候都会有很大的联系。将来我可能会有更多的字段,但目前只有这些字段。 有什么更好的

  • 问题内容: 我想验证以下行为的方法如下。 在我的@Test类中,我希望做这样的事情来验证是否使用“ exception.message”和再次使用“ exception.detail”进行了调用 但是Mockito抱怨​​如下 我如何告诉Mockito检查两个值? 问题答案: 进一步的阅读使我尝试使用ArgumentCaptors和以下作品,尽管比我想要的更为冗长。

  • 我在学习Kotlin的过程中遇到了一个我想不通的问题。我想在Kotlin中扩展Java类,并且能够在不同的情况下使用它的三个构造函数中的任何一个(基于我想抛出异常时所拥有的信息)。在java中,我的类将如下所示: 有人能建议我在Kotlin如何正确地做到这一点吗?

  • 问题内容: 我有一个PHP应用程序,有时需要处理URL,其中URL中的多个参数具有相同的名称。是否有一种简单的方法来检索给定键的所有值?PHP $ _GET仅返回最后一个值。 具体来说,我的应用程序是一个OpenURL解析器,可能会获得如下URL参数: (是的,我知道这很丑陋,欢迎来到我的世界)。请注意,键“ rft_id”出现两次: 将返回just ,先前的值()已被覆盖。 我想同时访问这两个值

  • 我有一个场景,其中一个url“serachUser”可能带有两个不同的值(请求参数)userId或UserName。 为此我创造了两种方法 但我得到模糊映射发现异常。Spring能处理这种情况吗?