JAX-RS有一些MVC支持,但我想知道JAX-RS是否真的是构建供人类使用的Web应用程序的不错选择.
如果用户在表单中输入错误或不完整的信息,则应该像Grails或Wicket一样再次显示.使用JAX-RS有一种舒适的方式吗?
据我所知,URI映射无法正常工作,如果没有给出所有必需的参数或存在类型转换问题(例如,使用Date).那是对的吗?
是否支持国际化模板?
以下是基于JAX-RS的简单GUI应用程序的示例.但它非常简单,像i18n这样的东西并没有讨论验证.
RESTEasy(一个JAX-RS实现)有一个很好的客户端框架,例如:
RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
SimpleClient client = ProxyFactory.create(SimpleClient.class, "http://localhost:8081");
client.putBasic("hello world");
Run Code Online (Sandbox Code Playgroud)
你如何设置HTTP标头?
澄清:
jkeeler提出的解决方案是一个很好的方法,但我想在ProxyFactory级别设置HTTP标头,我不想将标头传递给客户端对象.有任何想法吗?
我正在尝试在JAX-RS ExceptionMapper中检索请求的主体.到目前为止,这是我的代码:
@Provider @Componenet
public class BaseExceptionMapper implements ExceptionMapper<Exception> {
@Context private HttpServletRequest request;
@Override
public Response toResponse(Exception ex) {
// Trying to retrieve request body for logging throws an error
String requestBody = IOUtils.toString(request.getInputStream());
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的困境是我无法获取日志记录的请求体,因为servlet API不允许你多次为请求调用request.getInputStream()/ request.getReader()(并且JAX-RS显然是在调用它解析请求).有谁知道是否有办法做我想做的事情?
我开始在java EE6中学习Web服务.
我之前做过Web开发,但从来没有与Web服务有任何关系.
对我来说一切都是新的,我在网上找到的书籍和教程都是技术性的.
我开始学习.xsd架构和.xml.
在那个主题中我感到自信,我理解用于什么模式和验证意味着什么.
现在我的下一步是学习JAX-B(用于XML绑定的Java Api).我骑了一些关于它,我也在我的IDE中做了一些练习.但是我有很多基本的疑虑,这让我陷入困境,无法继续下一个话题.
如果有人能够很好地解释我的怀疑,我会感激不尽:
我正在寻找一个由你建立的好答案,而不仅仅是谷歌的复制粘贴(我已经在网上几个小时而且只是感到困惑).
我正在使用JBoss AS和JAX-RS创建REST端点.
让我们说我的课看起来像
@Path("/users")
public class UserResource {
@GET
public Response getAccount() {
return "hello";
}
}
Run Code Online (Sandbox Code Playgroud)
现在getAccount还没有经过身份验证
想要
- 我想添加身份验证,以便在代码命中时getAccount对用户进行身份验证
- 我希望身份验证由注释而不是XML配置驱动,如果可能的话
- 我想进行数据库比较以查看是否用户有效
问题
- 我从来没有这样做过,所以我不知道如何实现它
- 我已经搜索了很多东西并找到了泽西的例子
更新
- 我想为每个请求发送身份验证凭据,而不是创建任何会话
请用一个简单的工作示例指导我,我会尝试从那里扩展
我想为同一个GET路径提供多个功能.
当且仅当查询参数与URL字符串中的参数匹配时,我希望我的Web服务"找到"这些函数.
例如:
我有 Path("/myGET")
对于那条路,我想有两个功能:
Run Code Online (Sandbox Code Playgroud)@GET @Produces(MediaType.APPLICATION_JSON) @TypeHint(TagSets.class) public Response getTagSets(@QueryParam("entityId") Integer entityId) { ... }
和
Run Code Online (Sandbox Code Playgroud)@GET @Produces(MediaType.APPLICATION_JSON) @TypeHint(TagSets.class) public Response getTagSets(){ ... }
现在我收到一个错误:
严重:已使用资源和/或提供程序类检测到以下错误和警告:严重:生成媒体类型冲突.资源方法public javax.ws.rs.core.Response <...>.getTagSets(java.lang.Integer)和public javax.ws.rs.core.Response <...>.getTagSets(java.lang. Integer,java.lang.Integer)可以生成相同的媒体类型SEVERE:生成媒体类型冲突.资源方法public javax.ws.rs.core.Response <...>.getTagSets()和public javax.ws.rs.core.Response <...>.getTagSets(java.lang.Integer,java.lang .Integer)可以生成相同的媒体类型
首先:有没有办法实现我想做的事情..
第二:如果这是可用的,当且仅当查询参数与函数中请求的内容完全匹配时,是否有任何方式可以找到路径?例如,如果将调用相同的路径@QueryParam("differentParam"),它将不会到达任何2个函数.
第三:如果泽西没有办法做到这一点,有没有办法与其他框架工作一起做?
重要提示:回答这个问题的人认为我正在寻找一种解决方案而不是解决方案.今天我正在使用1个函数并检查参数并调用我需要的东西(这是我在发布问题之前使用的).但我正在寻找的可能是使用框架的力量来拯救我的麻烦
谢谢.
我有以下class和web.xml文件.春天在什么框架支持JAX-RS注解,例如@PATH,和@PUT,@Consumes...等.
换句话说,我可以用@PATH而不是@RequestMapping
Java的:
import org.springframework.stereotype.Controller;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
@Controller
@Path("/register")
public class RegisterServices {
@PUT
@Path("/create")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({"application/json"})
public Response create(@Context HttpServletRequest requestContex,
@HeaderParam("Authorization") String authorization,
String xMsisdn, String param) {}
}
Run Code Online (Sandbox Code Playgroud)
web.xml中
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud) 在我的实验室中,我被要求使用JSF框架创建一个简单的网站,并使用REST.我对这两个做了一些研究.事实证明,对于REST,我必须使用泽西的JAX-RS框架.我想知道如何整合这两个框架,JAX-RS和JSF?
我已经web.xml为JSF提供了以下servlet :
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
对于Jersey,我认为我必须使用以下servlet web.xml:
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.jbm.rest</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
现在我担心的是,对我而言,这个Jersey servlet似乎将取代Faces servlet web.xml.这会将我的应用程序从JSF更改为JAX-RS.但我想保留JSF并使用JAX-RS.我怎样才能做到这一点?
我是Web服务的新手,我正在尝试使用jax-rs rest和spring在Eclipse中进行项目.我使用java 1.8,但eclipse向我显示一个错误,jax-rs 2.0需要java 1.6或更新的错误,我的项目将无法正常工作
这是项目资源管理器和错误的屏幕截图.我试图谷歌它但不能得到任何英语解决方案

编辑:如果我试图显示它,看起来截图的质量很低,所以这里是截图的imgur链接,以获得更好的质量 http://i.imgur.com/YYyoeUX.png
我写了一个简单的类来测试响应读取实体方法(如果它按预期工作).但它没有奏效.
当我启动课程时,我收到以下错误response.readEntity():
Run Code Online (Sandbox Code Playgroud)Exception in thread "main" java.lang.IllegalStateException: Method not supported on an outbound message. at org.glassfish.jersey.message.internal.OutboundJaxrsResponse.readEntity(OutboundJaxrsResponse.java:150)
这是我写的代码
public static void main(String[] args) {
List<Entity> representations = new ArrayList<>();
representations.add(new Entity("foo", "baz", false));
representations.add(new Entity("foo1", "baz1", true));
representations.add(new Entity("foo2", "baz2", false));
Response build = Response.ok(representations).build();
printEntitesFromResponse(build);
}
public static void printEntitesFromResponse(Response response) {
response
.readEntity(new GenericType<List<Entity>>() {})
.stream()
.forEach(entity -> System.out.println(entity));
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
jax-rs ×10
java ×7
jersey ×3
rest ×3
spring ×3
servlets ×2
web-services ×2
dropwizard ×1
eclipse ×1
http-headers ×1
java-ee ×1
java-ee-6 ×1
jaxb ×1
jboss ×1
jsf ×1
resteasy ×1
spring-mvc ×1