JPA字段名称大小写与JSON字段名称不匹配

特雷伯

我是JPA的新手,正在尝试将JSON字符串传递到由JPA实体支持的Web服务。但是,我很难弄清大小写/命名约定。以下是我实体中的结构,但是当我传递JSON语句时,它想要“ userId”和“ enrollmentstatus”(注意大小写差异),否则会生成有关“无法识别的字段'enrollmentStatus'”的错误。对于一个,它坚持使用camelCase,对于另一个领域,则坚持使用小写字母。似乎不一致。我在这里想念或误解了什么?先感谢您。

@Basic(optional = false)
@NotNull
@Column(name = "USERID")
private long userid;

@Basic(optional = false)
@NotNull
@Size(min = 1, max = 1)
@Column(name = "ENROLLMENTSTATUS")
private String enrollmentstatus;

错误消息如下:

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "enrollmentStatus" (Class entities.LearningActivity), not marked as ignorable
 at [Source: org.glassfish.jersey.message.internal.EntityInputStream@344a5b; line: 1, column: 75] (through reference chain: entities.LearningActivity["enrollmentStatus"])

root cause

org.glassfish.jersey.server.ContainerException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "enrollmentStatus" (Class entities.LearningActivity), not marked as ignorable
 at [Source: org.glassfish.jersey.message.internal.EntityInputStream@344a5b; line: 1, column: 75] (through reference chain: entities.LearningActivity["enrollmentStatus"])

JSON字符串:

{“ mobile”:0,“ userId”:12345,“ learngingActivityId”:134,“ enrollmentStatus”:“ C”,“ dateTimeEnrolled”:“ 2014-03-20T00:08:30.18375Z”,“ dateTimeCompleted”:“ 2014 -03-20T00:08:30.18375Z“,”小时已花费“:0.0,”分数“:13.0,”已通过“:false,”教师备注“:” u0000“,” studentComments“:” u0000“,” internalData“:” u0000“}

实体外观代码:

@POST
@Override
@Consumes({"application/xml", "application/json"})
@Path("add")
public void create(LearningActivity entity) {
    super.create(entity);
}

日志文件:

[2014-03-20T08:01:51.777-0700] [glassfish 4.0] [FINE] [] [org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator] [tid: _ThreadID=111 _ThreadName=http-listener-1(3)] [timeMillis: 1395327711777] [levelValue: 500] [CLASSNAME: org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator$6] [METHODNAME: resolve] [[

java.lang.InstantiationException
    at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator$6.resolve(WadlGeneratorJAXBGrammarGenerator.java:420)
    at org.glassfish.jersey.server.wadl.WadlGenerator$ExternalGrammarDefinition.resolve(WadlGenerator.java:179)
    at org.glassfish.jersey.server.wadl.internal.ApplicationDescription.resolve(ApplicationDescription.java:82)
    at org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator.attachTypes(WadlGeneratorJAXBGrammarGenerator.java:481)
    at org.glassfish.jersey.server.wadl.internal.WadlBuilder.generate(WadlBuilder.java:149)
    at org.glassfish.jersey.server.wadl.internal.WadlApplicationContextImpl.getApplication(WadlApplicationContextImpl.java:153)
    at org.glassfish.jersey.server.wadl.processor.WadlModelProcessor$OptionsHandler.apply(WadlModelProcessor.java:134)
    at org.glassfish.jersey.server.wadl.processor.WadlModelProcessor$OptionsHandler.apply(WadlModelProcessor.java:118)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:125)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ObjectOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:167)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:91)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:346)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:341)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:101)
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:224)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:198)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:946)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:323)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:372)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:335)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
    at java.lang.Thread.run(Thread.java:724)
]]

[2014-03-20T08:01:51.779-0700] [glassfish 4.0] [FINE] [] [org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator] [tid: _ThreadID=111 _ThreadName=http-listener-1(3)] [timeMillis: 1395327711779] [levelValue: 500] [CLASSNAME: org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator] [METHODNAME: attachTypes] [[
  Couldn't find JAX-B element for class javax.ws.rs.core.Response]]
特雷伯

不一致的情况终于解决了。似乎JSON字段名称的大小写必须与getter / setter函数匹配,而不与实际的变量/字段名称匹配。就我而言,我手动向实体中添加了两个字段,但是使用驼峰式大小写作为获取/设置名称。即,getLearningActivityIdsetLearningActivityId,getUserId和setUserId。一旦将get / set方法更改为setLearningactivityidgetLearningactivityid一切都是一致的。当我注意到Netbeans创建的所有get / set方法的格式都遵循一种情况,即只有get / set之后的第一个字母大写时,才出现了线索。因此,显然,Jackson抓住了get / set方法的前三个字母(包括大小写)之后的名称,并使用方法名称的右手部分作为与之匹配并与其创建JSON字符串的名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Elasticsearch字段名称区分大小写

来自分类Dev

Firebase android基于类的更新不考虑字段名称的大小写

来自分类Dev

MySQL:创建表时区分大小写的字段名称

来自分类Dev

当DataFrame和Hive表中的字段名称存在大小写不匹配时,找不到Spark SQL 1.6密钥

来自分类Dev

JSON的Java对象:字段名称

来自分类Dev

获取JSON的字段名称

来自分类Dev

更改字段名称

来自分类Dev

LoganSquare不包含生成的Json上的字段名称

来自分类Dev

Logstash 将字段名称转换为全部小写

来自分类Dev

按字段名称对json字段进行排序

来自分类Dev

匹配 $_POST 键和 ACF 字段名称 (Wordpress)

来自分类Dev

插入数据库而不指定字段名称

来自分类Dev

没有字段名称的元组

来自分类Dev

jQuery递增字段名称

来自分类Dev

VBA函数到字段名称

来自分类Dev

在ruby中串联字段名称

来自分类Dev

dtype列表中的字段名称?

来自分类Dev

使用动态字段名称触发

来自分类Dev

在JOOQ中生成字段名称

来自分类Dev

指定字段名称而不是“值”

来自分类Dev

处理字段名称中的空格

来自分类Dev

Map Firestore保存字段名称

来自分类Dev

空字段名称的数组对象

来自分类Dev

GoogleJsonResponseException:必填字段名称

来自分类Dev

更改输入的字段名称的颜色

来自分类Dev

Postgres RowType字段名称

来自分类Dev

Mongodb:更新变量字段名称

来自分类Dev

获取上传文件的字段名称

来自分类Dev

Solr字段名称中的$