首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在californium CoAP服务器中使用path变量?

如何在californium CoAP服务器中使用path变量?
EN

Stack Overflow用户
提问于 2016-05-22 23:01:24
回答 1查看 446关注 0票数 1

类似于Jersey或其他框架中的Restful语法,我可以获取Restful uri路径中的变量,如下所示:

代码语言:javascript
复制
@Path("/users/{username}")
public class UserResource {

    @GET
    @Produces("text/xml")
    public String getUser(@PathParam("username") String userName) {
        ...
    }
}

但在californium中,语法是不同的,我尝试了这些代码,但它不正确:

代码语言:javascript
复制
class usersextends CoapResource {

    public users() {
        super("users/{username}");
    }

    @Override
    public void handleGET(CoapExchange exchange) {

        exchange.respond("The username is "+ ???????);
    }
}

我如何才能使用与第一段代码相同的函数?另一件事是我在哪里可以找到介绍API的官方文档?我刚刚看了源代码,现在试着找到解决方案。

EN

回答 1

Stack Overflow用户

发布于 2016-06-02 15:59:21

创建您自己的MessageDeliverer并更改findResource方法:

代码语言:javascript
复制
public class MyMessageDeliverer implements MessageDeliverer {

  private final Resource root;

  public MyMessageDeliverer(Resource root) {
    this.root = root;
  }

  /* You can use  implementation of methods from ServerMessageDeliverer */
  @Override
  public void deliverRequest(Exchange exchange) {
  }

  @Override
  public void deliverResponse(Exchange exchange, Response response) {
  }

  /* method returns last known Resource instead of null*/
  private Resource findResource(List<String> list) {
    LinkedList<String> path = new LinkedList<String>(list);
    Resource current = root;
    Resource last = null;
    while (!path.isEmpty() && current != null) {
      last = current;
      String name = path.removeFirst();
      current = current.getChild(name);
    }
    if (current == null) {
      return last;
    }
    return current;
  }
}

使用你的MessageDeliverer:

代码语言:javascript
复制
server = new CoapServer();
server.setMessageDeliverer(new MyMessageDeliverer(server.getRoot()));

将您的资源添加到服务器:

代码语言:javascript
复制
server.add(new Users());

Request / Users /{username}将发送给您的Users资源。从请求URI中获取变量:

代码语言:javascript
复制
public class Users extends CoapResource {

  public Users() {
    super("users");
  }

  public void handleGet(CoapExchange exchange) {
    List<String> uri = exchange.getRequestOptions().getUriPath();
    uri.remove("users");
    String username = uri.remove(0);

    //for query params:
    Map<String, String> params = new HashMap<String, String>();
    for (String p : exchange.getRequestOptions().getUriQuery()) {
      String[] parts = p.split("=");
      params.put(parts[0], parts[1]);
    }
    String param = params.get("param");

  }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37375922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档