标签: sitebricks

是否有一个良好类型的Scala(或Java)库来使用JSON Web API?

我想要一个简单的Java(或Scala)休息客户端库,让我可以轻松地在JSON REST API上执行GET/PUT/POST/DELETE等,并以类型安全的方式将JSON响应反序列化为Java对象,例如

RestClient client = new RestClient("http://api.mycompany.com").withAuth(Auth.Basic, username, password);
// This basically deserializes the JSON response into a POJO    
MyDocument[] result = client.get("/document?limit=10", MyDocument[].class);
MyFriend friend = client.post("/friend/Joe", body, MyFriend.class); 
Run Code Online (Sandbox Code Playgroud)

基本上我希望通用签名是这样的,get()例如 public <T> T get(String path, Class<T> responseClass),它会执行GET请求并将JSON响应反序列化为类型的POJOresponseClass

我确实找到了一个非常接近我想要的站点库的库,但它的范围受到严重限制,例如它不允许我做更多不常见的HTTP动词,如PUT/PATCH/DELETE,它无法设置标题或甚至是请求的正文.

我找到的另一个库有相反的问题 - 它无法进行basicauth,也没有为您将JSON序列化为对象.

java json scala rest-client sitebricks

6
推荐指数
1
解决办法
1853
查看次数

在Java GAE后端Servlet中使用Guice Injection

我有一个两难选择在我的GAE的Java应用程序:我想写将由GAE后端处理一个servlet 它也必须用Guice的依赖注入启动所有servlet的领域.我尝试了多种方法,但似乎没有人为我做这个伎俩.

我首先尝试在servlet中使用Sitebricks,但似乎这样做会导致GAE在查询后端URL时无法将类检测为合法的servlet:始终从后端返回404 Not Found.尽管如此,我确信该类使用Sitebricks注释正确注释,因为相同的URI路径与前端实例一起工作正常.

接下来,我尝试使用Guice Servlet Extension(参见此链接); 在我创建全局的类中Injector,我使用了这个绑定:

return Guice.createInjector(..., new ServletModule() {
    @Override
    protected void configureServlets() {
        serve("/backend/*").with(MyBackend.class);
    }
}, ...);
Run Code Online (Sandbox Code Playgroud)

不幸的是,与Sitebricks发生的问题完全相同:我在后端返回404错误,但在前端没有.

最后一种可行的方法是配置servlet-mapping web.xml; 传统的方法.这最终允许我的后端检测URI映射(随后是Google的Java GAE后端文档中写的内容:"后端与主应用程序版本共享web.xml中定义的servlet.").不幸的是,我无法利用Guice注射器使用这个程序,因此我非常不希望使用它web.xml.

我甚至尝试结合第二种和第三种方法:同时使用Guice Servlet Extension和web.xml.这个错误从后端返回500错误,并出现此错误:

java.lang.InstantiationException: com.example.MyBackend
    at java.lang.Class.newInstance0(Class.java:340)
    at java.lang.Class.newInstance(Class.java:308)
    at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.tools.development.BackendServersFilter.doRedirectedServerRequest(BackendServersFilter.java:292)
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:106)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at …
Run Code Online (Sandbox Code Playgroud)

google-app-engine servlets guice guice-servlet sitebricks

6
推荐指数
1
解决办法
882
查看次数

Sitebricks控制器中的方法拦截或请求参数验证

我正在将Sitebricks与Guice一起使用以实现REST服务,并且我有一组这样的方法:

@Get
@At("/:version/har/mostRecentEntry/assertResponseTimeWithin")
public Reply<?> doSomething(@Named("version") int version, Request<String> request) {
// Validation logic for request parameters ...

// Extracting parameters (converting url params to domain area objects)

// Actual business logic
}
Run Code Online (Sandbox Code Playgroud)

这导致大量复制/粘贴代码。

我正在寻找从请求参数中分离常见的验证和提取数据逻辑的方法。也许我可以使用AOP来做到这一点,但是Sitebricks提供的方法也许更简单?

java guice sitebricks

6
推荐指数
1
解决办法
203
查看次数