【问题标题】:Deserialize post/get params with Sitebricks使用 Sitebricks 反序列化发布/获取参数
【发布时间】:2012-09-24 21:08:29
【问题描述】:

在 sitebricks 中,我可以在 Sitebricks @Service 方法中轻松地从 json 格式的参数反序列化一个类,如下所示:

request.read(Person.class).as(Json.class); 

但是如何从 get/post 参数反序列化一个类?

我知道Request 对象可以访问参数 (request.params()),但这需要更多的努力。

【问题讨论】:

    标签: sitebricks


    【解决方案1】:

    在您的模块中声明您的处理程序类:

    at("/test").serve(TestPage.class); 
    

    然后用成员声明您的 TestPage 并关联与您的 get/post 参数对应的 getter/setter

    public class TestPage {
    
        private String param;
    
        @Get
        public Reply<?> get() {
            // request get param "param" is already mapped in param
        }
    
        @Post
        public Reply<?> post() {
            // request post param "param" is already mapped in param
        }
    
    
        public void setParam(String param) {
            this.param = param;         
        }
    
        public String getParam() {
            return this.param;
        }        
    
    }
    

    然后使用 get 或 post 参数“param”调用您的 url /test。

    查看http://sitebricks.org/#requestandreply

    希望对您有所帮助。

    Rgds

    【讨论】:

    • 如果要反序列化的对象是@Service(请求入口点)本身,那么您的解决方案肯定有效。当对象和服务类是两个不同的类时,我一直在寻找一种可行的解决方案。
    【解决方案2】:

    如果我想要反序列化的对象不是服务本身,那么我将不得不注入 Json 来进行反序列化。

    public class TestPage {
       @Inject Json json;
    
       @Post
       public void post(Request request) {
         String data = request.param("data");
         Person p = json.in(new ByteArrayInputStream(data.getBytes()), Person.class);
    
         ...
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-09
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多