📜  RESTful Web服务-Java(JAX-RS)(1)

📅  最后修改于: 2023-12-03 15:19:48.841000             🧑  作者: Mango

RESTful Web服务-Java(JAX-RS)

RESTful Web服务是一种使用HTTP协议对资源进行CRUD操作的服务。Java编程语言的JAX-RS(Java API for RESTful Web Services)规范定义了一组API,用于创建RESTful Web服务。

1. JAX-RS注解

JAX-RS使用注解来标记RESTful资源和操作。以下是一些常用的注解:

  • @Path:标记RESTful资源的路径。
  • @GET@POST@PUT@DELETE:标记对资源的操作类型。
  • @PathParam:将URI路径参数注入到方法参数中。
  • @QueryParam:将查询参数注入到方法参数中。
  • @Consumes:指定方法接受的请求MIME类型。
  • @Produces:指定方法返回的响应MIME类型。
@Path("/user")
public class UserResource {
    
    @GET
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public User getUser(@PathParam("id") Long id) {
        // 通过id获取用户信息
        return user;
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public void createUser(User user) {
        // 创建用户
    }

    @PUT
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    public void updateUser(@PathParam("id") Long id, User user) {
        // 更新用户信息
    }

    @DELETE
    @Path("/{id}")
    public void deleteUser(@PathParam("id") Long id) {
        // 删除用户
    }
}
2. JAX-RS客户端

JAX-RS也提供了客户端API,用于调用RESTful Web服务。

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://example.com/user/{id}")
        .resolveTemplate("id", 1);
User user = target.request(MediaType.APPLICATION_JSON).get(User.class);
3. JAX-RS异常处理

JAX-RS可以自定义异常类和异常处理器来处理异常。

public class UserNotFoundException extends RuntimeException {
    // 异常信息
}

@Provider
public class UserNotFoundExceptionMapper implements ExceptionMapper<UserNotFoundException> {

    @Override
    public Response toResponse(UserNotFoundException e) {
        // 构造响应信息
        return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
    }
}
4. JAX-RS过滤器

JAX-RS提供了过滤器API,用于在请求和响应处理之前或之后执行过滤器操作。

@Provider
public class LoggingFilter implements ContainerRequestFilter, ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        // 记录请求日志
    }

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
            throws IOException {
        // 记录响应日志
    }
}
5. JAX-RS集成框架

JAX-RS可以与众多Java Web框架整合使用,如Spring、Jersey、Apache CXF等。

@Configuration
public class JaxRsConfig extends ResourceConfig {

    public JaxRsConfig() {
        // 注册资源类和异常处理器
        register(UserResource.class);
        register(UserNotFoundExceptionMapper.class);
        // 注册过滤器
        register(LoggingFilter.class);
    }
}

@RestController
@Path("/user")
public class UserResource {

    @Autowired
    private UserService userService;

    @GET
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public User getUser(@PathParam("id") Long id) {
        return userService.getUser(id);
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public void createUser(User user) {
        userService.createUser(user);
    }

    @PUT
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    public void updateUser(@PathParam("id") Long id, User user) {
        userService.updateUser(id, user);
    }

    @DELETE
    @Path("/{id}")
    public void deleteUser(@PathParam("id") Long id) {
        userService.deleteUser(id);
    }
}
结论

JAX-RS提供了一套简单易用、功能丰富的API,用于创建RESTful Web服务。它还允许开发者自定义异常处理器和过滤器,提供更好的扩展性和可维护性。同时,JAX-RS可以与Spring等众多Java Web框架集成使用,方便开发者进行开发和维护。