如何读取 servlet 中的 json 值?

How to read json value in a servlet?

我正在通过邮递员将 json 作为 POST 发送到我的 url。

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

输入json:

{
    "token":"ABC123"
}

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

@Data
public class Foo {
    private String token;
}

而且,你 可以 HttpServlet and then parse the JSON using Jackson's ObjectMapper:

@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 网络 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和SpringWeb MVC的区别详见.