Tag: jax rs

使用JAX-RS在一个位置记录请求和响应

我有一个RESTEasy Web服务器,有很多方法。 我希望实现logback来跟踪所有请求和响应,但我不希望将log.info()添加到每个方法。 也许有办法在一个地方捕获请求和响应并记录它。 也许类似于RESTEasy上的HTTP请求流程链上的filter。 @Path(“/rest”) @Produces(“application/json”) public class CounterRestService { //Don’t want use log in controler every method to track requests and responces static final Logger log = LoggerFactory.getLogger(CounterRestService.class); @POST @Path(“/create”) public CounterResponce create(@QueryParam(“name”) String name) { log.info(“create “+name) try { CounterService.getInstance().put(name); log.info(“responce data”); // <- :(( return new CounterResponce(); } catch (Exception e){ […]

我们可以为同一个REST方法使用多个@Path注释吗?

我们可以为同一个REST方法使用多个@Path注释,即执行的方法是相同的,但它是在访问多个URL时执行的吗? 例如:我想在http://a/b/c和http://a/b上运行searchNames()方法。

自定义JAX-RS授权 – 在每个请求中使用JWT

我有一个JAX-RS服务,我希望所有用户都能访问我的服务,但只有那些有权查看结果的用户。 基于角色的安全性和现有的REALMS和身份validation方法不符合我的要求。 例如: 用户对一个REST服务进行身份validation,然后向他发送带有其ID的JWT令牌 用户请求其他资源,并在每个请求中向他的JWT发送他的ID 我检查他的用户ID(来自JWT),如果业务逻辑返回结果我发回去,否则我发送空结果集或特定HTTP状态 问题是:我应该在哪里检查用户ID,在一些单独的filter,安全上下文或每个REST方法实现中? 如何使用此ID提供REST方法,在按ID过滤请求后,是否可以在每个方法中注入securityContext? 我正在使用GlassFish 4.1和Jersey JAX-RS实现。

传递自定义类型查询参数

我如何接受自定义类型查询参数? public String detail(@QueryParam(“request”) final MYRequest request) { 上面的行在启动服务器时出错 jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.

Jersey ClientResponse.getEntity的generics类型

我遇到了使用jeresy ClientRespone.getEntity反序列化的问题 我试图遵循一些教程和问题,包括: http : //jersey.576304.n2.nabble.com/How-can-I-parse-a-java-util-List-lt-gt-Is-它支持泽西客户端-tdd2300852.html https://jersey.java.net/nonav/documentation/1.5/json.html http://www.programcreek.com/java-api-examples/的index.php?API = com.sun.jersey.api.client.GenericType 我仍然一遍又一遍地得到同样的例外 我的目标是:而不是: response.getEntity(String.class); –> {“name”:”Ben”,”type”:”The man”,”id”:0} 然后解析它(例如使用Jackson),我想让实体进入我的POJO对象。 到目前为止,这是我的尝试: 服务器端: @POST @Path(“/account”) // route to a specific method.re @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response saveDataIntoHash(Account account) { Account createdAccount = new Account(account.getName(), account.getType()); accountHash.put(createdAccount.getID(), createdAccount); return Response.status(201).entity(new AccountResponse(createdAccount.getID())).build(); } 服务器端帐户类: private String name; private String type; private int […]

泽西岛:返回一个字符串列表

我尝试将Jersey中的字符串列表作为JSON和XML返回。 我认为这将是微不足道的。 我的第一次尝试是写这样的东西 @GET @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @Path(“/bar”) public List get() { return dao.get(); } 我期待一个与此类似的输出:[“string1”,…,“stringN”不幸的是我得到了这个: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.LinkedList, and Java type java.util.List, and MIME media type application/json was not found 然后我为List编写了一个包装器StringList @XmlRootElement public class StringList { private List data; public StringList() { } public StringList(List data) { this.data = […]

在JAX-RS中将JSON解组为Java POJO

我希望得到每个Json格式化调用的键和值,并将它们用作java对象,如String或Integer,在其他客户端我将输入{“Name”:“HelloWorld”} 我会回到HelloWorld映射到它的Key到目前为止我见过的例子,但我只是很难找出每个标签做什么以及如何解析身体给出上述结果 @POST @Path(“/SetFeeds”) @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @JsonCreator public String setFeed(String jsonBody,@Context UriInfo uriInfo){ …Code to manipulate the body of the request return response; }

捕获所有exception并返回Jersey中的自定义错误

我想在jerseyrest服务中捕捉所有意想不到的例外情况。 因此我写了一个ExceptionMapper: @Provider public class ExceptionMapper implements javax.ws.rs.ext.ExceptionMapper { private static Logger logger = LogManager.getLogManager().getLogger(ExceptionMapper.class.getName()); @Override public Response toResponse(Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(“Internal error”).type(“text/plain”).build(); } } 映射器捕获所有exception。 所以我写不出来: public MyResult getById(@PathParam(“id”)) { if (checkAnyThing) { return new MyResult(); } else { throw new WebApplicationException(Response.Status.NOT_FOUND); } } 这是由Mapper捕获的。 现在我要写: public Response getById(@PathParam(“id”) { […]

如何使用JAXB使用Jersey 1.6生成JSON输出

@XmlRootElement public class Todo { private String s = “test”; public String getS() { return s; } public void setS(String s) { this.s = s; } } 和服务: @Path(“/test”) public class Service { @GET @Produces({MediaType.APPLICATION_JSON }) public List getAllGadgets() { return Arrays.asList(new Todo[] { new Todo() }); } } 我的web.xml: Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages […]

泽西2注射源为multipart formdata

我有一个方法: @POST @Consumes(“multipart/form-data”) @Produces( {“text/xml”}) public Response processForm( @FormDataParam(“myparam”) InputStream is, @FormDataParam(“myparam”) FormDataContentDisposition detail) 这与Jersey 1.x一起运作良好。 我升级到2.0 m11。 现在我收到以下错误: 12/01/2013 11:15:04 AM org.glassfish.jersey.server.ApplicationHandler initialize INFO: Initiating Jersey application, version Jersey: 2.0-m11 2012-12-21 12:34:15… 12/01/2013 11:15:04 AM org.glassfish.jersey.internal.Errors processErrors SEVERE: The following errors and warnings have been detected: WARNING: No injection source found for a parameter […]