【问题标题】:How to read json value in a servlet?如何在 servlet 中读取 json 值?
【发布时间】:2020-01-27 17:26:32
【问题描述】:

我通过邮递员将 json 作为 POST 发送到我的网址。

如何在我的 servlet doPOST() 中读取这个 json 值?

输入json:

{
    "token":"ABC123"
}

【问题讨论】:

    标签: json servlets


    【解决方案1】:

    您的 JSON 文档可以解析为如下所示的类:

    @Data
    public class Foo {
        private String token;
    }
    

    而且,你可以拥有一个HttpServlet,然后使用Jackson的ObjectMapper解析JSON:

    @WebServlet("/foo")
    public class FooServlet extends HttpServlet {
    
        private ObjectMapper mapper = new ObjectMapper();
    
        @Override
        protected void doPost(HttpServletRequest req,
                              HttpServletResponse resp) throws IOException {
    
            Foo foo = mapper.readValue(req.getInputStream(), Foo.class);
    
            // Do something with foo
    
            resp.setStatus(HttpServletResponse.SC_OK);
        }
    }
    

    但是,在大多数实际应用程序中,这不是您应该做的事情。 Servlet 有点太低级了,并且已经创建了一些框架来使事情变得更容易。实际上,这些框架中的大多数都建立在 servlet 之上。

    JAX-RS

    在 JAX-RS 及其实现(例如 Jersey)中,您将拥有以下内容:

    @Path("/foo")
    public class FooResource {
    
        @POST
        @Consumes(MediaType.APPLICATION_JSON)
        public Response doSomethingWithFoo(Foo foo) {
    
            // Do something with foo
    
            return Response.ok().build();
        }
    }
    

    Spring Web MVC

    在 Spring Web MVC 中,您可以拥有以下内容:

    @RestController
    public class FooController {
    
        @PostMapping(path = "/foo", consumes = MediaType.APPLICATION_JSON_VALUE)
        public ResponseEntity<Void> doSomethingWithFoo(@RequestBody Foo foo) {
    
            // Do something with foo
    
            return ResponseEntity.ok();
        }
    }
    

    详细JAX-RS和Spring Web MVC的区别可以参考这个answer。

    【讨论】:

      猜你喜欢
      • 2013-07-22
      • 2012-01-27
      • 2016-04-19
      • 2013-11-03
      • 2011-07-17
      • 2020-10-31
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      相关资源
      最近更新 更多