【发布时间】:2020-01-27 17:26:32
【问题描述】:
我通过邮递员将 json 作为 POST 发送到我的网址。
如何在我的 servlet doPOST() 中读取这个 json 值?
输入json:
{
"token":"ABC123"
}
【问题讨论】:
我通过邮递员将 json 作为 POST 发送到我的网址。
如何在我的 servlet doPOST() 中读取这个 json 值?
输入json:
{
"token":"ABC123"
}
【问题讨论】:
您的 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 及其实现(例如 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 中,您可以拥有以下内容:
@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。
【讨论】: