小编cas*_*lin的帖子

没有事务的EJB

我正在使用EJB以利用:

  1. 并发(而不是创建2个线程,我将工作分为2个EJB bean).

  2. 池(我使用无状态EJB很多,我喜欢池包含特定数量的bean的想法).这样,我不怕内存不足.内存使用情况更容易预测).

  3. 异步处理(我只需要一个注释).

好吧,问题是我在MongoDB中使用它,所以我不需要任何事务.我可以使用@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)@TransactionAttribute(TransactionAttributeType.NEVER)注释但是......这意味着我必须在任何地方指定它?

反正默认情况下是否禁用EJB事务?

ejb

1
推荐指数
1
解决办法
5250
查看次数

如何对REST Web服务执行POST请求?

我有一个RESTful Web服务,我在其中编写了一个接收POST请求的方法.

我试图通过URL访问该方法http://localhost:8091/prjctname/post.

但它抛出以下错误:

HTTP状态405 - 不支持请求方法'GET'
类型:状态报告
消息:不支持请求方法'GET'
描述:请求的资源不允许使用指定的HTTP方法

以下是代码段.

@RequestMapping(value = "/post", method = RequestMethod.POST)
@Produces("application/json")
@ResponseBody 
public String createUser(@RequestBody PCDBean bean, HttpServletRequest request) {

    String username = null;
    String password = null;
    System.out.println("inside post method");

    String result = service.getCustomer(username, password);
    if(result != null) {
        return username + password;
    } else {
        return "failure";
    }
}
Run Code Online (Sandbox Code Playgroud)

rest post web-services

1
推荐指数
1
解决办法
8437
查看次数

通过 JAX-RS 中的方法覆盖类中的 @Path 注释

我有一个用 java 维护的 REST API 服务(在球衣上,JAX-RS)

我想在我的服务中支持以下路线:

/api/v1/users/{userId}/cars
Run Code Online (Sandbox Code Playgroud)

但是,它连接到类的@Path注释。例如

/api/v1/cars/api/v1/users/{userId}/cars
Run Code Online (Sandbox Code Playgroud)

这是我的服务类:

@Path("api/v1/cars")
public class CarsService {
    @GET
    @Path("/api/v1/users/{userId}/cars")
    public Response getUserCars(@PathParam("userId") Long userId) {
        // ...
    }

    @GET
    public Response getCars() {
        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以覆盖它吗?

java jersey

1
推荐指数
1
解决办法
3252
查看次数

使用Servlet 4.0(Java EE 8)和HTTP/2创建Hello World应用程序

我试图了解Servlets 4(Java EE 8)如何通过编写Hello World类应用程序来帮助我们获得HTTP/2的好处.我知道Java EE 8尚未发布.

  • 有没有办法可以在像GlashFish这样的servlet容器的beta版本上试用这些功能?
  • 是否有开发人员试用Java EE 8 API的预发行版?

servlets java-ee

1
推荐指数
1
解决办法
3507
查看次数

在 JAX-RS/Java EE 应用程序启动时执行操作

有什么方法可以检查 JAX-RS/Java EE 应用程序何时启动/部署?

此时,我想检查数据库是否已初始化。否则,只有在数据库没有初始化的情况下,才需要进行初始化,并且需要在Java EE应用程序启动时进行检查。

因此,我需要知道是否有任何方法可以在 JAX-RS/Java EE 应用程序启动时进行捕获。

有任何想法吗?

jax-rs jakarta-ee

1
推荐指数
1
解决办法
623
查看次数

在 JAX-RS 中调用自定义 ExceptionMapper

我创建了一个自定义ExceptionMapper,每次 API 中发生异常时我都会调用该自定义,以将其映射到合适的响应。以下是我的自定义异常类:

@Provider
public class ServiceExceptionMapper implements ExceptionMapper<Throwable> {
  private Logger logging = LoggerFactory.getLogger(getClass());

  @Override
  public Response toResponse(Throwable throwable) {
    log.error("There is an exception: ", throwable);


    if (throwable instanceof IllegalArgumentException) {
      return Response.status(Response.Status.BAD_REQUEST).entity(throwable.getMessage()).type    (MediaType.TEXT_PLAIN).build();
    }

    if (throwable instanceof WebApplicationException) {
      WebApplicationException we = (WebApplicationException) throwable;
      return we.getResponse();
    }
    return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(throwable.getMessage()).type(MediaType.TEXT_PLAIN).build();
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,在我的资源类中,我有一个 try 和一个 catch 块。如果有异常,catch 块应该捕获它并调用自定义异常映射器类。抛出异常的常用方法如下:

 catch (Exception e) {
    throw new WebApplicationException(Response.status(Status.INTERNAL_SERVER_ERROR).entity("Internal Server Error").build());
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过以下方式调用异常映射器类:

catch (Exception e) {
    exceptionMapper.toResponse(e);
}
Run Code Online (Sandbox Code Playgroud)

exceptionMapper类的字段在哪里 …

java jax-rs

1
推荐指数
1
解决办法
2244
查看次数

与 Spring 中的 Jersey @Context、@FormParm 和 @BeanParam 等效注解

考虑以下 Spring MVC 注释:

@RequestMapping(value="content", 
                method=RequestMethod.GET, 
                produces = "application/json; charset=UTF-8")
Run Code Online (Sandbox Code Playgroud)

JAX-RS/Jersey 中的等效项是:

@GET
@Path("content")
@Produces(MediaType.APPLICATION_JSON)
Run Code Online (Sandbox Code Playgroud)

我正在寻找以下 JAX-RS/Jersey 注释的等效 Spring MVC 注释:

  • @Context
  • @FormParm
  • @BeanParam

web-services jax-rs spring-mvc jersey

1
推荐指数
1
解决办法
1874
查看次数

为什么"未修改"是重定向("3xx")状态代码?

如果您GET对资源进行了请求,那么您可以获得Not Modified响应以避免不必要的流量.

问题是为什么返回代码是304?这意味着它是一个重定向响应.在这种情况下,预期的重定向位置是什么?

2xx原本预计它会在范围内,因为它是一个有效答案的成功请求.

请参阅RFC.

http http-status-codes

1
推荐指数
1
解决办法
228
查看次数

Jackson 的 @JsonPropertyOrder 不适用于 @JsonUnwrapped

我有一个包含另一个对象属性的对象,如下所示:

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;

@JsonPropertyOrder({"fA1","b","fA2"})
@Data
public class A {
    private String fA1;
    private String fA2;

    @JsonUnwrapped
    private B b = new B();

    @Data
    class B {
        private String fB1;
        private String fB2;
    }

    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        A a = new A ();
        System.out.println(objectMapper.writeValueAsString(a));
    }

}
Run Code Online (Sandbox Code Playgroud)

我想要的是生成尊重这个顺序的json:

{
  "fA1":"",
  "fB1":"",
  "fA2":"",
  "fB2":""
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点吗?

java json orders

1
推荐指数
1
解决办法
3832
查看次数

设计用于使用 PATCH 执行部分更新的端点

考虑一个名为 的大实体entity。它公开了 100 种不同的更新操作,包括添加和删除属性、更新属性等。

使用单个 URI 和应用程序服务器路由处理的许多情况之间应该优先选择什么:

PATCH /entity/[id]  {"type":"a","key1":"val1","key2":"val2"} or
                    {"type":"b","key3":"val3","key4":"val4"} or ...
Run Code Online (Sandbox Code Playgroud)

...并且使用许多 URI,每个应用程序服务器路由处理一种情况:

PATCH /entity/[id]/a  {"key1":"val1","key2":"val2"}
PATCH /entity/[id]/b  {"key3":"val3","key4":"val4"}
Run Code Online (Sandbox Code Playgroud)

或者也许使用PUT?需要更新(非常)部分实体。

考虑到 REST 合规性、负载均衡器、缓存、KISS 等,最好的方法是什么。任何想法将不胜感激。

rest http

1
推荐指数
1
解决办法
1761
查看次数