我正在使用EJB以利用:
并发(而不是创建2个线程,我将工作分为2个EJB bean).
池(我使用无状态EJB很多,我喜欢池包含特定数量的bean的想法).这样,我不怕内存不足.内存使用情况更容易预测).
异步处理(我只需要一个注释).
好吧,问题是我在MongoDB中使用它,所以我不需要任何事务.我可以使用@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
和@TransactionAttribute(TransactionAttributeType.NEVER)
注释但是......这意味着我必须在任何地方指定它?
反正默认情况下是否禁用EJB事务?
我有一个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) 我有一个用 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)
有什么办法可以覆盖它吗?
我试图了解Servlets 4(Java EE 8)如何通过编写Hello World类应用程序来帮助我们获得HTTP/2的好处.我知道Java EE 8尚未发布.
有什么方法可以检查 JAX-RS/Java EE 应用程序何时启动/部署?
此时,我想检查数据库是否已初始化。否则,只有在数据库没有初始化的情况下,才需要进行初始化,并且需要在Java EE应用程序启动时进行检查。
因此,我需要知道是否有任何方法可以在 JAX-RS/Java EE 应用程序启动时进行捕获。
有任何想法吗?
我创建了一个自定义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
类的字段在哪里 …
考虑以下 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
如果您GET
对资源进行了请求,那么您可以获得Not Modified响应以避免不必要的流量.
问题是为什么返回代码是304
?这意味着它是一个重定向响应.在这种情况下,预期的重定向位置是什么?
我2xx
原本预计它会在范围内,因为它是一个有效答案的成功请求.
请参阅RFC.
我有一个包含另一个对象属性的对象,如下所示:
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)
有什么办法可以做到这一点吗?
考虑一个名为 的大实体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 等,最好的方法是什么。任何想法将不胜感激。
java ×3
jax-rs ×3
http ×2
jersey ×2
rest ×2
web-services ×2
ejb ×1
jakarta-ee ×1
java-ee ×1
json ×1
orders ×1
post ×1
servlets ×1
spring-mvc ×1