当前位置: 首页 > 知识库问答 >
问题:

Resteasy @Consume JSON Fail with java.util.Map

李森
2023-03-14

我有以下json结构:

{
    "foo" : {
        "foo1" : {
            "txt" : "val",
            "txt1" : "val1",
            "txt2" : "val2",
        },
        "foo2" : {
            "txt" : "val",
            "txt1" : "val1",
            "txt2" : "val2",
        }
    },
    "bar" : {
        "bar1": {
            "txt" : "val",
            "txt1" : "val1",
            "txt2" : "val2",
        },
        "bar2": {
            "txt" : "val",
            "txt1" : "val1",
            "txt2" : "val2",
        }
    }
}

虽然我有以下pojo:

class Pojo {
  String txt;
  String txt1;
  String txt2;
}

我的重新定位方法看起来像:

@POST
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
@Path("/foo")
public void bar(@QueryParam("jsonObj") Map<String,Map<String,Pojo>> jsonObj);

但是,在启动服务器时,我收到以下错误:

java.lang.RuntimeException:在basetype:java.util.bar(java.util.Map)的公共抽象void com.foo.FooBar.bar(“jsonObj”)上,找不到接受Stringparam或valueOf()或fromString()方法的构造函数。映射到org.jboss.restiasy.core.StringParameterInjector.initize(StringParameterInjecter.java:217)~[resteasy-jaxr-3.0.9.Final.jar:na],位于org.jboss/restiasy.core.StringParameterInputerorg.jboss.restiasy.core.InterferFactoryImpl.createParameterExtractor(InjectorFactoryImpl.java:85)~[resteasy-jaxr-3.0.9.Final.jar:na]位于org.jboss/restiasy.core.MethodInjectorImpl.(MethodInjector Impl.java:42)~[resteasy-jarr-3.0.9.FFinal.jar:na]位于org.jboss.restieasy.core.InstorFactoryimpl.createMethodInjecterorg.jboss.rerestasy.core.ResourceMethodInvoker.(ResourceMethodInvoker.java:100)~[resteasy-jars-3.0.9.Final.jar:na]位于org.jboss/rerestasy.core.ResourceMethodRegistry.processMethod(ResourceMethodRegistry.java:280)~[resteasy-jaks-3.0.9.Final.jar:na]位于org.jboss.reresteasy.core.RResourceMethodRegistry.ResourceMethodRegistry.register(ResourceMethodRegistration.java:251)~[resteasy-jars3.0.9.Final.jar:naorg.jboss.restiasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:221)~[resteasy-jaxrs-3.0.9.Final.jar:na]位于org.jboss/restiasy.core.ResourceMethodRegistry.add ResourceFactory(资源方法注册表.java:193)~[resteasy-jaxrs-3.0.9.Final.jar:na]位于org.jboss.restieasy.core.R资源方法注册表.addResourceFactory(资源方法注册.java:179)~[resteasy-jars-3.0.9.Final.jar:na]位于org.jboss.restiasy.plugins.spring.SpringBeanProcessor.onApplicationEvent(SpringBeanProcessor.java:486)~[resteasys-spring-3.0.9.Final.jar:na]位于org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMultiaster.java:96)~[spring-context-3.2.8.RELEASE.jar:3.2.8.RELEASE]位于org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334)~[spring-context-3.2.8.RELEASE.jar:3.2.8.RELEASE]位于org.springfframework.context.support.AabstractApplicationContext.finishRefresh(Abstract ApplicationContext.java:948org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)~[spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE]位于org.springfframework.html" target="_blank">web-context.CntextLoader.configAndRefreshWeb.ApplicationContext(ContextLoader.java:306)~[spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE]位于org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListenerjava:112)[spring-web-3.2.8.REASE.jar:3.2.8.RELEASE]位于org.jboss.restiasy.plugins.spring.spring.SingContextLoaderlister.contextInitialize(SpringContextLoaderLister.java:48)[resteasy-spring-3.0.9.Final.jar:na]位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)[catalina.jar:7.0.47]位于org.apache.cacatalina.core.StandardContext.startInternal(StandardContext.java:5434)[catalinea.jar:7.0.47],位于org.apache.cotalina.util.LifecycleBase.start(LifecycleBase.java:150)[cataina.jar:7.0.47]在org.apache.caatalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)[catalina.jar:7.0.47]位于java.util.concurrent.FutureTask.run(FutureTask.java:262)[na:17.00-45]位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutoer.java:1145)[na:1.7.0-45]位于java.lang.Thread.run(线程.java:744)[na:1.7.0-45]

我经历了留档和复杂的对象,它说使用StringConvertor,但不应该支持简单的类型,如列表,地图等…

共有1个答案

颛孙星海
2023-03-14

而不是在Map中获取JSON

 类似资料:
  • JBoss RESTEasy 是一个用来使用Java语言开发 RESTFul Web服务的框架。 RESTEasy 项目是 JAX-RS 的一个实现,集成的一些亮点: 不需要配置文件,只要把JARs文件放到类路径里面,添加 @Path 注解就可以了。 完全的把 RESTEeasy 配置作为Seam 组件来看待。 HTTP 请求由Seam来提供,不需要一个额外的Servlet。 Resources

  • 我正在使用quarkus中的框架为mandrill API构建一个rest客户端 这是application.properties的相关部分 我的示例资源 我看到的是,如果我正在调用的API(在这种情况下是Madrill)返回错误响应(例如,如果我的密钥是错误的),那么我用来存储响应的变量不会得到响应。相反,我向我的应用程序公开的REST API围绕着它,填充了来自Madrill的响应。 这是预期

  • 我有一个项目,它使用RESTEasy REST对象 jar包含一个名为resteasy-client.js的文件,该文件被添加到web页面中,使创建HTTP调用变得更加容易。有虫子!一旦文件发送到客户机,服务器将在方法:WriteJavaScript中:jsapiWriter.java中添加一行

  • 根据我的理解,如果应用程序服务器本身由于负载过大而无法响应,用户将得到500个错误代码,因此在这种情况下,请求本身将无法到达目的地。请就我的理解提出意见。

  • 问题内容: 我尝试使用Resteasy 3.0.9中提供的新功能。 如果我在(子类的)方法中定义了此过滤器,则不会再扫描我的资源。这意味着将找不到资源,并且会发生以下错误: 在下一页上,我找到了描述: javax.ws.rs.NotFoundException:找不到完整路径的资源错误发生 但基本上,此部署选项的作用是扫描应用程序的@ Path,@ Provider等注释。 原因是JAX- RS将

  • 我正在尝试编写简单的RESTEasy客户端。下面给出了示例代码: 我在行中得到异常: 我在控制台中看到以下错误: 更新:我还尝试在POM中添加resteasy jax-rs依赖关系。我还通过在web.xml中添加以下行来验证是否启用了ResteasyProviderFactory: 请查看以下maven依赖项列表: 但这不起作用。 但现在我看到了其他方法的类似异常: 我在行中看到了这个例外: 奇怪

  • 是否有关于jboss wildfly上管理模块的指南或完整教程? 或者有人已经有了这些头痛,可以分享建议?

  • 我编写了一个简单的RestEasy客户端代理来执行iTunes搜索。看起来是这样的: 我的JSON模型类也很简单。实际上,对于第一个调用,我想要的只是“resultCount”值,只是为了确保连接正常工作。 但是,当我运行一个简单的测试时,我得到以下异常: