相关疑难解决方法(0)

使用Jersey/JAXB/Jackson的Java.util.Map到JSON对象

我一直在尝试创建Jersey REST Web服务.我想从Java类接收和发出JSON对象,如下所示:

@XmlRootElement
public class Book {

    public String code;

    public HashMap<String, String> names;

}
Run Code Online (Sandbox Code Playgroud)

这应该像这样转换为JSON:

{
    "code": "ABC123",
    "names": {
        "de": "Die fabelhafte Welt der Amelie",
        "fr": "Le fabuleux destin d'Amelie Poulain"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我找不到标准的解决方案.每个人似乎都在实施自己的包装 解决方案.这个要求对我来说似乎是极其基本的; 我无法相信这是普遍接受的解决方案,特别是因为Jersey真的是Java中更有趣的部分之一.

我也试过升级到Jackson 1.8,它只给了我这个,这是极端虚假的JSON:

{
    "code": "ABC123",
    "names": {
        "entry": [{
            "key": "de",
            "value": "Die fabelhafte Welt der Amelie"
        },
        {
            "key": "fr",
            "value": "Le fabuleux destin d'Amelie Poulain"
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议的解决方案吗?

java rest json jersey jackson

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

Jersey错误:找不到媒体类型= application/json的MessageBodyReader

我正在尝试使用Jersey作为框架实现一个小的REST API,原则上代码运行正常,但是当我尝试对哈希表进行'GET'时,我收到以下错误:

nov 23, 2014 4:27:40 PM org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor aroundReadFrom
GRAVE: MessageBodyReader not found for media type=application/json, type=interface java.util.Map, genericType=java.util.Map<upf.dad.proyecto.New, upf.dad.proyecto.Term>.
1440 [DefaultQuartzScheduler_Worker-3] ERROR org.quartz.core.JobRunShell - Job DEFAULT.testJob3 threw an unhandled Exception: 
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=interface java.util.Map, genericType=java.util.Map<upf.dad.proyecto.New, upf.dad.proyecto.Term>.
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:230)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:154)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1124)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:851)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:810)
)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:313)
    at upf.dad.proyecto.HotTopicDetector.News(HotTopicDetector.java:110)
    at upf.dad.proyecto.ScheduledTestJob3.execute(ScheduledTestJob3.java:11)
1440 [DefaultQuartzScheduler_Worker-3] ERROR org.quartz.core.ErrorLogger - Job (DEFAULT.testJob3 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader …
Run Code Online (Sandbox Code Playgroud)

java rest json jax-rs jersey

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

标签 统计

java ×2

jersey ×2

json ×2

rest ×2

jackson ×1

jax-rs ×1