Java 为作为命名参数传递的特殊字符生成HTTP 404的云端点

Java 为作为命名参数传递的特殊字符生成HTTP 404的云端点,java,google-app-engine,google-cloud-endpoints,Java,Google App Engine,Google Cloud Endpoints,我用一个HTTPGET方法创建了非常简单的端点。我正在传递一个字符串作为ApiMethod命名参数: @Api (name = "sample_endpoint") public class SampleEndpoint { public Entity get(@Named("parameter") String parameter) { return new Entity(parameter); } public class Entity

我用一个HTTPGET方法创建了非常简单的端点。我正在传递一个字符串作为ApiMethod命名参数:

@Api (name = "sample_endpoint")
public class SampleEndpoint
{
    public Entity get(@Named("parameter") String parameter)
    {
        return new Entity(parameter);
    }

    public class Entity
    {
        public String parameter = "Validated ok.";
        public Entity(String parameter) { this.parameter = parameter; }
        public String getParameter() { return parameter; }
    }
}
当我使用包含字母、数字和一些特殊字符的参数调用URL时,如
-.
,它可以工作:

GET http://localhost:8888/_ah/api/sample_endpoint/v1/entity/passedparam

200 OK
{
 "parameter": "passedparam"
}
但当我在参数中插入某些特殊字符时,比如
:#/
,我得到的是HTTP 404。参数是URL编码的,在示例中我使用value
passed:param

GET http://localhost:8888/_ah/api/sample_endpoint/v1/entity/passed%3Aparam

404 Not Found
<html><head><title>Error 404</title></head>
<body><h2>Error 404</h2></body>
</html>
GEThttp://localhost:8888/_ah/api/sample_endpoint/v1/entity/passed%3Aparam
404找不到
错误404
错误404

它是bug还是特性?或者我做错了?

这一点现在正在讨论中。由于dev和prod的行为不同,这里肯定有一个bug。我的怀疑是,您正在尝试的操作应该在dev和prod中都能正常工作,并且本地服务器中存在一个bug。

从App Engine SDK 1.8.6开始,这个问题已经解决了。

您是否设法克服了这个问题?我一周来都有同样的问题,幸运的是:/