我正在使用Jeresy Jax-RS来构建一个Web服务.现在我需要使用端口#获取请求的url(如果存在).
因此,如果我的服务在http://www.somelocation.com/web/services上运行,我想要捕获www.somelocation.com
我怎样才能做到这一点 ?
使用我非常简单的JAX-RS服务,我使用Tomcat和JDBC领域进行身份验证,因此我正在使用JSR 250注释.
问题是我想在HTTP状态响应中返回自定义消息体.状态代码(403)应保持不变.例如,我的服务如下所示:
@RolesAllowed({ "ADMIN" })
@Path("/users")
public class UsersService {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public String getUsers() {
// get users ...
return ...;
}
}
Run Code Online (Sandbox Code Playgroud)
如果角色与"ADMIN"不同的用户访问该服务,我想将响应消息更改为类似的内容(取决于媒体类型[xml/json]):
<error id="100">
<message>Not allowed.</message>
</error>
Run Code Online (Sandbox Code Playgroud)
目前泽西岛返回以下机构:
HTTP Status 403 - Forbidden
type Status report
message Forbidden
description Access to the specified resource (Forbidden) has been forbidden.
Apache Tomcat/7.0.12
Run Code Online (Sandbox Code Playgroud)
如何更改默认邮件正文?有没有办法处理(可能抛出)异常来构建我自己的HTTP状态响应?
我得到的错误,当我尝试上传正是基于关闭此处显示的实例文件 示例
错误是
为servlet com.testapp.rest.JaxRsActivator分配异常:java.lang.RuntimeException:无法找到类org.jboss.resteasy.core.AsynchronousDispatcher的公共构造函数
这意味着什么?
我不知道标题是否令人困惑,但让我说我有这个界面:
@Produces(MediaType.APPLICATION_JSON)
@Path("/user")
public interface UserService {
@GET
@Path("/{userId}")
public Response getUser(@PathParam("userId") Long userId);
}
Run Code Online (Sandbox Code Playgroud)
为什么当我尝试实现一个版本Eclipse重写覆盖方法的注释而不是类?
class UserServiceImpl implements UserService {
@Override
@GET
@Path("/{userId}")
public Response getUser(@PathParam("userId") Long userId) {
// TODO Auto-generated method stub
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图为restful Web服务创建一个标准定义,然后进行不同的实现.使用标准的jax-rs是否可以这样?我是否有机会使用错误的注释?
这是一个示例Resource类:
@Path("/resource")
public class SomeResource {
@GET
@Produces({MediaType.APPLICATION_XML})
public String someMethod(@QueryParam("param1") String param1, ..., @Context HttpServletRequest request) {
String remoteUser = request.getRemoteAddr();
// Business logic here.
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
而JerseyTest的资源:
public class TestSomeResource extends JerseyTest {
@Override
protected Application configure() {
enable(TestProperties.LOG_TRAFFIC);
return new ResourceConfig(SomeResource.class);
}
@Test
public void testXMLResponse() {
String response = target("resource")
.queryParam("param1", param1)
// More parameters here.
.request()
.accept(MediaType.APPLICATION_XML)
.get(String.class);
// Some assertions on response.
}
}
Run Code Online (Sandbox Code Playgroud)
除了@Context HttpServletRequest用作输入参数的资源外,我能够为所有其他资源运行泽西测试.它给了一个InternalServerErrorException: HTTP 500 Internal …
我使用Backbone.js,Bootstrap,NetBeans IDE 8.0,Java EE 7,JDK 8,WildFly服务器8.1.0,JBoss RESTEasy(resteasy-jaxrs-3.0.8),JBoss 2.2.22,JBoss EJB 3制作Web应用程序.
我(相对)是Web开发的新手,因此我才开始掌握很多基本概念和技术.我正在尝试将用户和角色的权限系统构建到Web应用程序中,但我似乎无法使@RolesAllowed注释在我的RESTful Web服务中工作.我已经在这个问题上工作了几天.
我有一个名为UserResource.java的RESTful资源(Java Enterprise/Session Bean?),在这里我有一个方法create来为应用程序创建一个新用户:
import java.net.URI;
import java.security.Principal;
import java.util.List;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import org.jboss.ejb3.annotation.SecurityDomain;
@Stateless
@SecurityDomain("other")
@Path("/user")
public class UserResource {
@EJB(name = "UserServiceImp")
UserService userService;
@Context
private UriInfo uriInfo;
@RolesAllowed({"admin"})
@Path("create")
@POST
public Response create(CreateRequest request) {
try {
System.out.println("Start of create method");
User user = userService.createUser(request);
return getCreateResponse(user);
}
catch (Exception …Run Code Online (Sandbox Code Playgroud) 在首字母缩略词JAX-RS中,X代表什么?
我知道RS代表Restful Service而J代表Java和A代表API.那么X呢?
我尝试使用CorsFilterResteasy 3.0.9中提供的新功能.我在本页底部找到了一个示例:
使用JAX-RS/RESTEasy实现CORS的Ajax请求
如果我在方法getSingletons()(Application子类)中定义此过滤器,那么我的资源不再被扫描.这意味着将找不到资源并发生以下错误:
javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures
在下一页我找到了一个描述: javax.ws.rs.NotFoundException:找不到完整路径的资源错误Occures
但基本上,此部署选项的作用是扫描应用程序的@ Path,@ Extider等注释.原因是JAX-RS将首先分别在重写的getClasses()和getSingletons()中查找类和对象.如果然后返回空集,则告诉JAX-RS进行扫描(根据规范).
所以如果我覆盖这个getSingletons()方法,JAX-RS不会进行扫描?有没有其他方法来配置它CorsFilter并启用资源扫描?
根据文件,
"客户端是管理客户端通信基础设施的重量级对象.初始化以及客户端实例的处理可能是一项相当昂贵的操作.因此建议在应用程序中仅构建少量客户端实例."
好吧,我正在尝试将Client本身和WebTarget实例缓存在一个静态变量中,someMethod()在多线程环境中调用:
private static Client client = ClientBuilder.newClient();
private static WebTarget webTarget = client.target("someBaseUrl");
...
public static String someMethod(String arg1, String arg2)
{
WebTarget target = entrTarget.queryParam("arg1", arg1).queryParam("arg2", arg2);
Response response = target.request().get();
final String result = response.readEntity(String.class);
response.close();
return result;
}
Run Code Online (Sandbox Code Playgroud)
但有时(并非总是)我得到一个例外:
BasicClientConnManager的使用无效:仍然分配了连接.确保在分配另一个连接之前释放连接.
如何正确地重用/缓存Client/WebTarget?是否可以使用JAX RS Client API?或者我必须使用一些特定于框架的功能(resteasy/jersey)你能提供一些示例或文档吗?
我正在尝试为我的一些webservice调用添加一些响应标头.我使用CXF 2.1.2和JAX-RS编写了我的Web服务.我需要返回一个对象,我还想在Response中添加一些标题. 如果不返回javax.ws.rs.core.Response对象,如何在响应中添加标头并仍然返回我的javabean?