Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何放置子BeanParam_Java_Jakarta Ee_Jersey_Jax Rs_Wildfly - Fatal编程技术网

Java 如何放置子BeanParam

Java 如何放置子BeanParam,java,jakarta-ee,jersey,jax-rs,wildfly,Java,Jakarta Ee,Jersey,Jax Rs,Wildfly,我使用的是Jax-rs,有一种方法将在其post中接收复杂对象 所以我试着做一个豆瓣 以下是服务站的方法: @POST public void create(@BeanParam BeanNewPack newPack) { newPack.getPacks().stream().forEach(pack::insert); } 在我的BeanNewPack中,我放置字段并用FormParam进行注释(因为我收到一篇帖子)。我正在制作两个长字段和另一个BeanParam的列表。检查以下

我使用的是Jax-rs,有一种方法将在其post中接收复杂对象

所以我试着做一个豆瓣

以下是服务站的方法:

@POST
public void create(@BeanParam BeanNewPack newPack) {
    newPack.getPacks().stream().forEach(pack::insert);
}
在我的BeanNewPack中,我放置字段并用FormParam进行注释(因为我收到一篇帖子)。我正在制作两个长字段和另一个BeanParam的列表。检查以下内容:

@FormParam("id_from")
private Long idFrom;

@FormParam("id_store")
private Long idStore = -1L;

@FormParam("products_to")
private List<ProductsTo> productsTo;
我的目的是发布一个json,如下所示:

{
  "id_from": 1,
  "id_store": -1,
  "products_to": [
    {"id": 2, "amount": 1, "porcent": 0.5},
    {"id": 3, "amount": 1, "porcent": 0.5}
  ]  
}
现在我使用的是Wildfly 10,因此当我尝试部署应用程序时,会出现以下错误:

11:32:47,881 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 63) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./: java.lang.RuntimeException: RESTEASY003875: Unable to find a constructor that takes a String param or a valueOf() or fromString() method for javax.ws.rs.FormParam("produtos_para") on private java.util.List ....services.pack.pack.BeanNovoPack.produtosPara for basetype: ....services.pack.servicos.pack.ProdutoPara
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: java.lang.RuntimeException: RESTEASY003875: Unable to find a constructor that takes a String param or a valueOf() or fromString() method for javax.ws.rs.FormParam("produtos_para") on private java.util.List br.com.softbox.ivendas.servicos.pack.BeanNovoPack.produtosPara for basetype: br.com.softbox.ivendas.servicos.pack.ProdutoPara
    at org.jboss.resteasy.core.StringParameterInjector.initialize(StringParameterInjector.java:220)
    at org.jboss.resteasy.core.StringParameterInjector.<init>(StringParameterInjector.java:64)
    at org.jboss.resteasy.core.FormParamInjector.<init>(FormParamInjector.java:28)
    at org.jboss.resteasy.core.InjectorFactoryImpl.createParameterExtractor(InjectorFactoryImpl.java:176)
    at org.jboss.resteasy.cdi.CdiInjectorFactory.createParameterExtractor(CdiInjectorFactory.java:124)
    at org.jboss.resteasy.core.PropertyInjectorImpl.getParameterExtractor(PropertyInjectorImpl.java:118)
    at org.jboss.resteasy.core.PropertyInjectorImpl.populateMap(PropertyInjectorImpl.java:66)
    at org.jboss.resteasy.core.PropertyInjectorImpl.<init>(PropertyInjectorImpl.java:54)
    at org.jboss.resteasy.core.InjectorFactoryImpl.createPropertyInjector(InjectorFactoryImpl.java:65)
    at org.jboss.resteasy.cdi.CdiInjectorFactory.createPropertyInjector(CdiInjectorFactory.java:113)
    at org.jboss.resteasy.core.FormInjector.<init>(FormInjector.java:37)
    at org.jboss.resteasy.core.InjectorFactoryImpl.createParameterExtractor(InjectorFactoryImpl.java:119)
    at org.jboss.resteasy.cdi.CdiInjectorFactory.createParameterExtractor(CdiInjectorFactory.java:52)
    at org.jboss.resteasy.core.MethodInjectorImpl.<init>(MethodInjectorImpl.java:44)
    at org.jboss.resteasy.core.InjectorFactoryImpl.createMethodInjector(InjectorFactoryImpl.java:77)
    at org.jboss.resteasy.cdi.CdiInjectorFactory.createMethodInjector(CdiInjectorFactory.java:58)
    at org.jboss.resteasy.core.ResourceMethodInvoker.<init>(ResourceMethodInvoker.java:99)
    at org.jboss.resteasy.core.ResourceMethodRegistry.processMethod(ResourceMethodRegistry.java:281)
    at org.jboss.resteasy.core.ResourceMethodRegistry.register(ResourceMethodRegistry.java:252)
    at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:222)
    at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:194)
    at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:180)
    at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:157)
    at org.jboss.resteasy.core.ResourceMethodRegistry.addPerRequestResource(ResourceMethodRegistry.java:76)
    at org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:404)
    at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:245)
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:113)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:36)
    at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117)
    at org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:78)
    at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103)
    at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:231)
    at io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:132)
    at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:526)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:101)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)
    ... 6 more

有什么方法可以在另一个BeanParm下列出BeanParm吗?

JSON不能使用
@BeanParm
@FormParam
。如果不使用任何注释并遵循正确的JavaBean约定,则无需执行任何其他操作。它将自动为您转换

@POST
@Consumes("application/json")
public void create(BeanNewPack newPack) {
并删除所有
@FormParam

如果您的属性不遵循JavaBean约定,或者JSON中的wierd属性名称与命名约定不匹配,那么您可以使用
@JsonProperty

@JsonProperty("id_from")
private Long idFrom;

@JsonProperty("id_store")
private Long idStore = -1L;

@JsonProperty("products_to")
private List<ProductsTo> productsTo;
如果您不想添加任何额外的依赖项,那么您需要遵循JavaBean命名约定,例如

"id_from": 1

// class

public void setId_from() {}

我知道这很难看。但如果您想在JSON中使用下划线,就需要这样做。有一种方法可以使snake-case-to-camel-case转换自动进行,但这可能超出了这个问题的范围。只要熟悉使用
@JsonProperty
。如果您想了解有关自动转换的更多信息,只需进行搜索或发布另一个问题。

对于JSON,您不使用
@BeanParam
@FormParam
。如果不使用任何注释并遵循正确的JavaBean约定,则无需执行任何其他操作。它将自动为您转换

@POST
@Consumes("application/json")
public void create(BeanNewPack newPack) {
并删除所有
@FormParam

如果您的属性不遵循JavaBean约定,或者JSON中的wierd属性名称与命名约定不匹配,那么您可以使用
@JsonProperty

@JsonProperty("id_from")
private Long idFrom;

@JsonProperty("id_store")
private Long idStore = -1L;

@JsonProperty("products_to")
private List<ProductsTo> productsTo;
如果您不想添加任何额外的依赖项,那么您需要遵循JavaBean命名约定,例如

"id_from": 1

// class

public void setId_from() {}

我知道这很难看。但如果您想在JSON中使用下划线,就需要这样做。有一种方法可以使snake-case-to-camel-case转换自动进行,但这可能超出了这个问题的范围。只要熟悉使用
@JsonProperty
。如果您想了解有关自动转换的更多信息,只需搜索或发布另一个问题。

非常感谢您的回答。它可能解决了这个问题,但我仍然在想,是否有办法在没有第三方库的情况下使用BeanParam或其他(JAX-RS)资源来解决这个问题。只有在不想使用奇怪的属性名称时,才需要它。就BeanParam而言,它不适用于JSON。如果你想使用JSON,那么你就不能使用BeanParam,或者干脆不要在JSON中使用下划线。用骆驼皮箱谢谢你的回答。它可能解决了这个问题,但我仍然在想,是否有办法在没有第三方库的情况下使用BeanParam或其他(JAX-RS)资源来解决这个问题。只有在不想使用奇怪的属性名称时,才需要它。就BeanParam而言,它不适用于JSON。如果你想使用JSON,那么你就不能使用BeanParam,或者干脆不要在JSON中使用下划线。用骆驼皮就行了