Tag: jax rs

JAX-RS – 如何将JSON和HTTP状态码一起返回?

我正在编写一个REST Web应用程序(NetBeans 6.9,JAX-RS,TopLink Essentials)并试图返回JSON 和 HTTP状态码。 我有准备好的代码,并在从客户端调用HTTP GET方法时返回JSON。 主要有: @Path("get/id") @GET @Produces("application/json") public M_機械 getMachineToUpdate(@PathParam("id") String id) { // some code to return JSON … return myJson; } 但是我也想要返回一个HTTP状态码(500,200,204等)以及JSON数据。 我试图使用HttpServletResponse : response.sendError("error message", 500); 但是这使得浏览器认为这是一个“真正的”500,所以输出网页是一个普通的HTTP 500错误页面。 我想返回一个HTTP状态代码,这样我的客户端JavaScript就可以处理一些逻辑(取决于它)(例如,在HTML页面上显示错误代码和消息)。 这是可能的或应该HTTP状态码不能用于这样的事情?

自定义ObjectMapper与泽西岛2.2和jackson2.1

由于Jersey忽略了我的自定义ObjectMapper,因此我正在与Grizzly,Jersey和Jackson一起使用REST应用程序。 POM依赖关系: <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-grizzly2-servlet</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.1.4</version> </dependency> </dependencies> 最终的版本是:灰熊2.3.3,jackson2.1.4和泽西岛2.2。 主要类(我希望显式注册Jersey组件): public class Main { public static void main(String[] args) { try { ResourceConfig rc = new ResourceConfig(); rc.register(ExampleResource.class); rc.register(ObjectMapperResolver.class); HttpHandler handler = ContainerFactory.createContainer( GrizzlyHttpContainer.class, rc); URI uri = new URI("http://0.0.0.0:8080/"); HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri); ServerConfiguration config = server.getServerConfiguration(); config.addHttpHandler(handler, […]

无法序列化HibernateProxy的对象原因

我收到来自服务器的以下错误响应。 HTTP状态500 – 键入例外报告 信息 描述服务器遇到一个内部错误(),阻止它履行这个请求。 例外 javax.servlet.ServletException:java.lang.UnsupportedOperationException:试图序列化java.lang.Class:org.hibernate.proxy.HibernateProxy。 忘了注册一个types适配器? 根本原因 java.lang.UnsupportedOperationException:试图序列化java.lang.Class:org.hibernate.proxy.HibernateProxy。 忘了注册一个types适配器? 从Javadebugging器: org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer@7632012e 我正在使用Gson将我的Java对象转换为JSON。 下面我粘贴了一些我的代码。 这是我的资源: @Stateless @LocalBean @Path("/autos") @Produces(MediaType.APPLICATION_JSON) public class AutoResource { @EJB private CarAssembler warehouse; @Context private UriInfo uriInfo; @GET public Response allAutos() { // Building a context, lots of code… // Creating a Gson instance and configures it… final Auto […]

我如何定制JSON对象的序列化为JSON?

我正在使用Jersey为服务器组件创buildREST Web服务。 我要在列表中序列化的JAXB注释的对象如下所示: @XmlRootElement(name = "distribution") @XmlType(name = "tDistribution", propOrder = { "id", "name" }) public class XMLDistribution { private String id; private String name; // no-args constructor, getters, setters, etc } 我有一个REST资源来检索一个分配,看起来像这样: @Path("/distribution/{id: [1-9][0-9]*}") public class RESTDistribution { @GET @Produces("application/json") public XMLDistribution retrieve(@PathParam("id") String id) { return retrieveDistribution(Long.parseLong(id)); } // business logic (retrieveDistribution(long)) } […]

我可以使用@Context注释注入哪些对象?

我是JAX-RS的新手,我试图理解@Context注释是如何工作的。 在javadoc中有六个类的列表( Application , UriInfo , Request , HttpHeaders , SecurityContext , Providers )。 但是,我发现在networking上使用这个注释与其他types的代码,例如: @GET public String something(@Context HttpServletRequest req) { } 是否有一个支持types的列表可以用于这个注释? 这个列表是否在标准的执行之间改变? 我目前正在尝试使用Jersey,而且我担心我将编写无法移植到其他JAX-RS实现的代码。

问题Resteasy 3.09 CorsFilter

我尝试使用Resteasy 3.0.9中提供的新CorsFilter 。 我在本页面的底部find了一个示例: 使用JAX-RS / RESTEasy实现CORS的Ajax请求 如果我在Application子类的方法getSingletons()定义了这个filter,那么我的资源就不会被扫描了。 这意味着没有资源将被发现,并发生以下错误: javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures 在接下来的页面上,我发现了一个描述: javax.ws.rs.NotFoundException:找不到完整path的资源错误发生 但基本上,这个部署选项的作用是扫描应用程序的注解@Path,@Provider等。 原因是JAX-RS将首先分别在重写的getClasses()和getSingletons()中查找类和对象。 如果返回空集,则告诉JAX-RS进行扫描(按照规范)。 因此,如果我覆盖getSingletons()方法,JAX-RS不会执行扫描吗? 是否有另一种方式来configuration此CorsFilter并启用资源扫描?

何时使用@QueryParam vs @PathParam

我不问这个已经问过的问题: @PathParam和@QueryParam有什么区别? 这是“最佳做法”或公约问题。 什么时候你会使用@PathParam vs @QueryParam 。 我能想到的是,这个决定可能是用这两个来区分信息模式。 让我在下面说明我的LTPO – 不是完美的观察。 PathParam的使用可以保留为信息类别,这将很好地落入信息树的一个分支。 PathParam可以用来深入实体类层次结构。 而QueryParam可以用来指定属性来定位一个类的实例。 例如, /Vehicle/Car?registration=123 /House/Colonial?region=newengland /category?instance @GET @Path("/employee/{dept}") Patient getEmployee(@PathParam("dept")Long dept, @QueryParam("id")Long id) ; vs /category/instance @GET @Path("/employee/{dept}/{id}") Patient getEmployee(@PathParam("dept")Long dept, @PathParam("id")Long id) ; vs ?category+instance @GET @Path("/employee") Patient getEmployee(@QueryParam("dept")Long dept, @QueryParam("id")Long id) ; 我不认为有这样做的标准惯例。 在那儿? 不过,我想听听人们如何使用PathParam与QueryParam来区分他们的信息,就像我上面的例子。 我也很想听听练习背后的原因。

JAX-RS发布多个对象

我有一个方法; @POST @Path("test") @Consumes(MediaType.APPLICATION_JSON) public void test(ObjectOne objectOne, ObjectTwo objectTwo) 现在我知道我可以发布一个JSON格式的对象,只需将其放入正文中即可。 但是有可能做多个对象吗? 如果是这样,怎么样?

如何在Wildfly中configurationJackson?

我有一个会话Bean与以下方法: @POST @Consumes("application/x-www-form-urlencoded") @Path("/calculate") @Produces("application/json") public CalculationResult calculate(@FormParam("childProfile") String childProfile, @FormParam("parentProfile") String parentProfile) { … } 返回的CalculationResult不能映射到JSON并发生以下exception: Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.test.UniqueName and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)… 我如何在Wildfly中configurationJackson及其SerializationFeature ?

如何在JSF框架中实现JAX-RS RESTful服务

在我的实验室中,我被要求使用JSF框架创build一个简单的网站,并使用REST。 我对这两个人做了一些研究。 事实certificate,对于REST,我必须在Jersey上使用JAX-RS框架。 我想知道如何整合这两个框架,JAX-RS和JSF? 我在JSF的web.xml已经有了下面的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> 对于泽西岛,我觉得我必须在web.xml使用下面的servlet: <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> 现在我担心的是,对于我来说,这个Jersey servlet似乎会取代web.xml的Faces servlet。 这将改变我的应用程序从JSF到JAX-RS。 但是我想保留JSF并使用JAX-RS。 我怎样才能做到这一点?