当我试图使用Jackson序列化一个非常简单的对象时,我得到了一个exception。 错误: org.codehaus.jackson.map.JsonMappingException:找不到类MyPackage.TestA的序列化程序,没有发现创buildBeanSerializer的属性(为避免exception,请禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) 下面是序列化的简单类和代码。 任何人都可以告诉我为什么我得到这个错误? public class TestA { String SomeString = "asd"; } TestA testA = new TestA(); ObjectMapper om = new ObjectMapper(); try { String testAString = om.writeValueAsString(testA); // error here! TestA newTestA = om.readValue(testAString, TestA.class); } catch (JsonGenerationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // […]
它应该是这么简单,但我试图在一小时后,找不到它#embarrasing。 我需要得到一个JSONstring,例如, {"k1":v1,"k2":v2} ,parsing为一个JsonNode 。 JsonFactory factory = new JsonFactory(); JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}"); JsonNode actualObj = jp.readValueAsTree(); 给 java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
在JSON中返回空值的首选方法是什么? 对基元有不同的偏好吗? 例如,如果服务器上的对象具有一个名为“myCount”的Integer而没有值,则该值最正确的JSON将是: {} 要么 { "myCount": null } 要么 { "myCount": 0 } 同样的问题的string – 如果我有一个空string“myString”在服务器上,是最好的JSON: {} 要么 { "myString": null } 要么 { "myStrung": "" } 或(上帝帮助我) { "myString": "null" } 我喜欢集合的约定在JSON中表示为一个空集合http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html 一个空的数组将被表示: { "myArray": [] } 编辑总结 “个人偏好”的论点似乎是现实的,但是由于社区将消耗更多不同的服务/来源, JSON结构的惯例将有助于规范化所述服务的消耗和重用。 至于build立一个标准,我会build议采纳绝大多数jackson公约,但有一些例外: 对象比基元更受欢迎。 空集合优于空。 没有值的对象表示为空。 基元返回它们的值。 如果您返回的JSON对象大多为空值,那么您可能会有一个候选人重构为多个服务。 { "value1": null, "value2": null, "text1": null, […]
Jackson图书馆的ObjectMapper类似乎是线程安全的 。 这是否意味着我应该声明我的ObjectMapper像这样的静态字段 class Me { private static final ObjectMapper mapper = new ObjectMapper(); } 而不是像这样的实例级别的字段? class Me { private final ObjectMapper mapper = new ObjectMapper(); }
由于Jersey忽略了我的自定义ObjectMapper,因此我正在与Grizzly,Jersey和Jackson一起使用REST应用程序。 POM依赖关系: <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-grizzly2-servlet</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.1.4</version> </dependency> </dependencies> 最终的版本是:灰熊2.3.3,jackson2.1.4和泽西岛2.2。 主要类(我希望显式注册Jersey组件): public class Main { public static void main(String[] args) { try { ResourceConfig rc = new ResourceConfig(); rc.register(ExampleResource.class); rc.register(ObjectMapperResolver.class); HttpHandler handler = ContainerFactory.createContainer( GrizzlyHttpContainer.class, rc); URI uri = new URI("http://0.0.0.0:8080/"); HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri); ServerConfiguration config = server.getServerConfiguration(); config.addHttpHandler(handler, […]
从fasterxml.jackson 2.6.3迁移到2.7.0之后。 这是因为在Spring的AbstractJackson2HttpMessageConverter使用的public JavaType constructType(Type type, Class<?> contextType)方法被删除了。 如何解决这个问题? 我正在使用Spring 4.2.3。 /signin/facebook java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.type.TypeFactory.constructType(Ljava/lang/reflect/Type;Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/JavaType; at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.getJavaType(AbstractJackson2HttpMessageConverter.java:314) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.canRead(AbstractJackson2HttpMessageConverter.java:146) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.canRead(AbstractJackson2HttpMessageConverter.java:141) at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.doWithRequest(RestTemplate.java:706) at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:770) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:594) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557) at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:357) at org.springframework.social.oauth2.OAuth2Template.postForAccessGrant(OAuth2Template.java:242) at org.springframework.social.oauth2.OAuth2Template.exchangeForAccess(OAuth2Template.java:144) at org.springframework.social.connect.web.ConnectSupport.completeConnection(ConnectSupport.java:160) at org.springframework.social.connect.web.ProviderSignInController.oauth2Callback(ProviderSignInController.java:228) 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:44) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) […]
我正在使用Ajax Simplification Spring 3.0文章中指定的JSON使用Spring MVC。 经过这么多的尝试和我的代码的变化取决于在各种论坛上发现的build议,我的代码仍然无法正常工作。 我继续得到以下错误:(406)由此请求标识的资源只能根据请求“accept”标头()生成具有不可接受的特征的响应。 我需要在我的appconfig.xml中。 APP-config.xml中 <context:component-scan base-package="org.ajaxjavadojo" /> <!– Configures Spring MVC –> <import resource="mvc-config.xml" /> MVC-config.xml中 <mvc:annotation-driven /> <!– Forwards requests to the "/" resource to the "index" view –> <mvc:view-controller path="/" view-name="index"/> <!– Resolves view names to protected .jsp resources within the /WEB-INF/views directory –> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="mediaTypes"> […]
我试图parsingJava中的JSONstring,并find键值对,以便我可以确定JSON对象的近似结构,因为JSONstring的对象结构是未知的。 例如,一个执行可能有一个像这样的JSONstring: {"id" : 12345, "days" : [ "Monday", "Wednesday" ], "person" : { "firstName" : "David", "lastName" : "Menoyo" } } 而另一个像这样的: {"url" : "http://someurl.com", "method" : "POST", "isauth" : false } 我将如何循环遍历各种JSON元素并确定键和值? 我看着jackson-core的JsonParser 。 我看到如何抓住下一个“标记”并确定它是什么types的标记(即字段名称,值,数组开始等),但是,我不知道如何获取实际标记的值。 例如: public void parse(String json) { try { JsonFactory f = new JsonFactory(); JsonParser parser = f.createParser(json); JsonToken […]
我试图通过一个程序员布鲁斯的教程,是应该允许反序列化的多态JSON。 完整的列表可以在这里find程序员布鲁斯教程 (伟大的东西btw) 我已经完成了前五项,但没有遇到任何问题,但是最后一项(例6)遇到了困难,这当然是我真正需要的工作。 我在编译时收到以下错误 ObjectMappertypes中的readValue(JsonParser,Class)方法不适用于参数(ObjectNode,Class) 这是由大量的代码引起的 public Animal deserialize( JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { ObjectMapper mapper = (ObjectMapper) jp.getCodec(); ObjectNode root = (ObjectNode) mapper.readTree(jp); Class<? extends Animal> animalClass = null; Iterator<Entry<String, JsonNode>> elementsIterator = root.getFields(); while (elementsIterator.hasNext()) { Entry<String, JsonNode> element=elementsIterator.next(); String name = element.getKey(); if (registry.containsKey(name)) { animalClass = registry.get(name); […]
有没有办法使用jacksonJSON处理器做自定义字段级序列化? 例如,我想要上课 public class Person { public String name; public int age; public int favoriteNumber; } 序列化到以下JSON: { "name": "Joe", "age": 25, "favoriteNumber": "123" } 请注意,age = 25被编码为一个数字,而favoriteNumber = 123被编码为一个string 。 jackson(Jackson)封送给了一个数字。 在这种情况下,我希望favoriteNumber被编码为一个string。