标签: resteasy

无法找到内容类型application/json的MessageBodyReader并键入类java.lang.String

我正在使用带有jackson提供程序的RestEasy客户端并收到上述错误

客户端代码是:

ClientRequest request = new ClientRequest(url);
request.accept(MediaType.APPLICATION_JSON);
ClientResponse<String> response = request.get(String.class);

if (response.getStatus() != 200) {
  throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}

BufferedReader br =
  new BufferedReader(new InputStreamReader(new ByteArrayInputStream(response.getEntity().getBytes())));
Run Code Online (Sandbox Code Playgroud)

response.getEntity()正在抛出ClientResponseFailure异常,错误是

Unable to find a MessageBodyReader of content-type application/json and type class java.lang.String
Run Code Online (Sandbox Code Playgroud)

我的服务器端代码如下:

@GET
@Path("/{itemId}")
@Produces(MediaType.APPLICATION_JSON)
public String item(@PathParam("itemId") String itemId) {
  //custom code

  return gson.toJSON(object);
}
Run Code Online (Sandbox Code Playgroud)

rest json jax-rs resteasy jackson

20
推荐指数
4
解决办法
4万
查看次数

请求的资源上没有"Access-Control-Allow-Origin"标头 - Resteasy

我正在开发一个web应用程序,包括UI-Angular,Server-Java,RestEasy 3.0.9.Final for rest api calls

当我试图从另一个域访问其余服务时,我得到以下错误

无法加载对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http:// localhost:8080 "访问.

我配置我的服务器端以响应跨域调用,这是使用GET调用但POST调用正在创建ERROR

web.xml中

<context-param>
    <param-name>resteasy.providers</param-name>
    <param-value>com.test.sample.app.CorsFeature</param-value>
</context-param>

<listener>
    <listener-class>
        org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>


<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>
        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.test.sample.app.Application</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>resteasy-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/rest</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

服务类

@GET
@Path("/getnameAtt")
@Produces(MediaType.APPLICATION_JSON)
public Response getHostnameAttributes() {
return Response
.status(200)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Headers",
        "origin, content-type, accept, authorization")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods",
        "GET, POST, PUT, DELETE, OPTIONS, HEAD")
.header("Access-Control-Max-Age", "1209600")
.entity(new TestImpl().getHostNameAttributes())
.build();
}

@POST
@Path("/getSeq") …
Run Code Online (Sandbox Code Playgroud)

rest resteasy cors

20
推荐指数
1
解决办法
11万
查看次数

RESTeasy并返回带有模型的JSP页面

是否有一种简单的,而不是使用弹簧的方式让RESTeasy返回带有模型的jsp或html页面?我想做一些类似于Spring的ModelAndView,我有一个请求说/ contacts/loomer并让它在jsp模板中返回一个模拟对象.我看到的所有示例都是针对JSON/XML的.我知道在Jersey你可以使用可查看的,但我只需要使用RESTeasy的东西.

谢谢!

我想要这样的东西(但没有春季模式视图):

   @POST
   @PUT
   @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
   @Produces(MediaType.TEXT_HTML)
   public ModelAndView saveContactForm(@Form Contact contact)
         throws URISyntaxException
   {
      service.save(contact);
      return viewAll();
   }
Run Code Online (Sandbox Code Playgroud)

model-view-controller jboss resteasy

19
推荐指数
2
解决办法
1万
查看次数

将JSON REST Web服务中的日期序列化为ISO-8601字符串

我有一个使用JBoss AS 7.1的JAX-RS应用程序,以及包含Dates(java.util.Date)的POST/GET JSON和XML对象:

@XmlRootElement
@XmlAccessorType(XmlAccessField.FIELD)
public class MyObject implements Serializable
{
    @XmlSchemaType(name = "dateTime")
    private Date date;
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我在get方法上使用@Produce("application/xml")时,objets被序列化为XML并且日期被转换为ISO-8601字符串(例如"2012-12-10T14:50:12.123 + 02:00") ).

但是,如果我在get方法上使用@Produce("application/json"),则JSON对象中的日期是时间戳(例如"1355147452530")而不是ISO-8601字符串.

如何配置JAX-RS实现(RESTEasy)以JSON格式将日期序列化为ISO-8601字符串而不是时间戳?

谢谢您的回答.

注意:我还尝试使用自定义JAX-RS提供程序为日期执行JSON序列化

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class CustomJsonDateProvider implements MessageBodyWriter<Date>
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这个提供程序似乎是由RESTeasy在JBoss初创公司注册的:

[org.jboss.jaxrs] Adding JAX-RS provider classes: package.CustomJsonDateProvider
...
[org.jboss.resteasy.cdi.CdiInjectorFactory] No CDI beans found for class package.CustomJsonDateProvider. Using default ConstructorInjector.
Run Code Online (Sandbox Code Playgroud)

但它永远不会被使用!

json jax-rs resteasy jboss7.x

19
推荐指数
1
解决办法
2万
查看次数

列出RestEasy服务的所有公开/可用端点?

是否可以以简单的方式列出RestEasy服务的所有公开/可用端点?

jboss resteasy

19
推荐指数
3
解决办法
1万
查看次数

使用JAX RS或Spring MVC的REST

我正在尝试构建一个REST Web服务(服务器端),它允许合作伙伴系统以JSON格式连接/ POST订单信息.我应该使用JAX RS(例如来自JBOSS RESTEasy)还是使用Spring MVC来构建这样的服务?就构建REST服务而言,它们似乎都有足够的能力完成同样的事情.

谢谢!

rest jax-rs spring-mvc resteasy

18
推荐指数
2
解决办法
2万
查看次数

REST响应后如何删除文件

在将文件作为对REST请求的响应返回后,处理删除文件的最佳方法是什么?

我有一个端点,根据请求创建一个文件并在响应中返回它.一旦调度响应,就不再需要该文件,可以/应该删除该文件.

@Path("file")
@GET
@Produces({MediaType.APPLICATION_OCTET_STREAM})
@Override
public Response getFile() {

        // Create the file
        ...

        // Get the file as a steam for the entity
        File file = new File("the_new_file");

        ResponseBuilder response = Response.ok((Object) file);
        response.header("Content-Disposition", "attachment; filename=\"the_new_file\"");
        return response.build();

        // Obviously I can't do this but at this point I need to delete the file!

}
Run Code Online (Sandbox Code Playgroud)

我想我可以创建一个tmp文件,但我认为有一个更优雅的机制来实现这一目标.该文件可能非常大,因此我无法将其加载到内存中.

java rest resteasy

18
推荐指数
2
解决办法
9063
查看次数

RESTEasy - 需要完整路径的@Path?

我正在搞乱JAX-RS并创建了一个调用生成JSON的REST服务的应用程序.我试过Jersey,一切都很顺利,但我不得不切换到RESTEasy,因为我的应用程序需要用JDK5构建.我将web.xml更改为以下内容:

<web-app>
<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>

<listener>
    <listener-class>
     org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
    </listener-class>
</listener>

<servlet>
    <servlet-name>RESTEasy</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>RESTEasy</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<!-- ... -->
</web-app>
Run Code Online (Sandbox Code Playgroud)

所以我希望每个以/ rest开头的URL都由RESTEasy处理.我的服务如下:

@Path("/services")
public class MyRESTServices {

    @GET
    @Path("service1")
    @Produces(MediaType.APPLICATION_JSON)
    public Object service1(Blah blah) {

    }
}
Run Code Online (Sandbox Code Playgroud)

使用Jersey工作正常,http:// localhost/MyContext/rest/services/service1绑定到我的service1()方法.但是,当我改为RESTEasy时,我有一个404:

HTTP状态404 - 无法找到相对的资源:/ rest/services/service1 of full path:http:// localhost/MyContext/rest/services/service1

这意味着RESTEasy处理了请求但找不到绑定到此URL的任何服务.

然而,在我的课堂上,@Path("/services")改为@Path("/rest/services")工作.你知道我为什么会有这种奇怪的行为吗?我读过的所有教程/文档都只提到相对路径,不包括/ rest前缀...

java jax-rs resteasy

17
推荐指数
1
解决办法
3万
查看次数

什么是JAXB和JAXRS?它们有什么关系?

对不起这个生硬的问题.但是很多人日复一日地使用这两个术语但我不知道.我做了一些关于这个的研究并且知道它是分开的.但不明白它是如何相关的.我将首先分享我对这两个的理解.

JAXB是XML-to-Java绑定技术,支持模式和Java对象之间以及XML实例文档和Java对象实例之间的转换.在内部,JAXB在xml和java之间进行所有这些转换.这是xml的解析器,然后它知道xml中的哪个组件对应于java中的内容并且它会中断.从JAXB转换此答案是通过xjc(或codgen插件)等工具完成的.映射可能就像

xsd:string java.lang.String

xsd:integer java.math.BigInteger

JaxRs与众不同.这是处理请求的一组规范.意思是它说"GET("/ foo")"意味着用url/foo处理一个get调用.它只说明了这一点.怎么做的?是的,这称为此规范的实现.有许多实现,如restlet,resteasy,jersey,apache cxf等.这类似于逻辑和你在数学中实现的方式.算法的想法是桶搜索.这可以以任何方式实现.在Java术语中,JaxRs是接口,这4个restlet,resteasy,jersey,apache cxf是接口的实现.

现在请说出我的理解是否正确.然后告诉他们如何相关.请帮忙 .如果可能,图片说明将更有帮助.

jax-rs jaxb restlet xml-binding resteasy

17
推荐指数
1
解决办法
1万
查看次数

HTTP状态415 - 无法使用内容类型

使用JSON正文返回的REST服务的POST操作

org.jboss.resteasy.spi.UnsupportedMediaTypeException

:不能消耗内容类型异常

两者@Consumes(MediaType.APPLICATION_JSON)@Consumes("application/json")返回相同的异常.

我尝试使用Postman API客户端调用该服务.

图片

@RolesAllowed("admin")
@POST   
@Consumes(MediaType.APPLICATION_JSON)
@Path("/auth")
public Response login(UserCl usr){

    if(usr.getUsername().compareTo("user") == 0 && 
                usr.getPassword().compareTo("pass") == 0){                      
        return Response.status(200).build(); 
    }
    else{
        return Response.status(401).build();
    }

}

12:44:07,322 WARN  [org.jboss.resteasy.core.SynchronousDispatcher] (http-localhost-127.0.0.1-8080-1) Failed executing POST user-service/auth: org.jboss.resteasy.spi.UnsupportedMediaTypeException: Cannot consume content type
    at org.jboss.resteasy.core.registry.Segment.match(Segment.java:117) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.registry.SimpleSegment.matchSimple(SimpleSegment.java:33) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.registry.RootSegment.matchChildren(RootSegment.java:327) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.registry.SimpleSegment.matchSimple(SimpleSegment.java:44) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.registry.RootSegment.matchChildren(RootSegment.java:327) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:374) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:367) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:307) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:173) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:118) [resteasy-jaxrs-2.3.2.Final.jar:]
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.2.Final.jar:]
    at …
Run Code Online (Sandbox Code Playgroud)

java json resteasy postman

17
推荐指数
1
解决办法
3万
查看次数