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

我可以使用默认消息转换器将JSON数据转换为POJO吗?

易研
2023-03-14

我知道< code > mappingpingjacksonhttpmessageconverter 是默认值,但是我得到了

JSON分析错误:无法识别的令牌“Stock”:应为(“true”、“false”或“null”);嵌套异常是com.fasterxml.jackson.core。JsonParseException:无法识别的令牌“Stock”:应为('true'、'false'或'null')

我认为原因可能是< code > mappingmappingjackson 2 HttpMessageConverter无法将JSON数据转换为自定义POJO,我们必须通过< code>@Overide方法< code > extendMessageConverters()添加< code >新的HttpMessageConverter :

/**
 * A hook for extending or modifying the list of converters after it has been
 * configured. This may be useful for example to allow default converters to
 * be registered and then insert a custom converter through this method.
 * @param converters the list of configured converters to extend.
 * @since 4.1.3
 */
default void extendMessageConverters(List<HttpMessageConverter<?>> converters) 

{
}

还是没有必要

我尝试了不同的JSON样式:{“id”:“1”}和{“Stock”:{“id):“1”}。但两者都不起作用。

public class myWebApplication extends AbstractAnnotationConfigDispatcherServletInitializer
{

  @Override
  protected Class<?>[] getRootConfigClasses() {
    return new Class<?>[]{RootConfig.class};
  }

  @Override
  protected Class<?>[] getServletConfigClasses() {
    return new Class<?>[] {WebConfig.class};
  }  

  @Override
  protected String[] getServletMappings() {
    return new String[]{"/"};
  }
}

WebConfig(DispatcherServlet):

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"WebBeans"})
public class WebConfig implements WebMvcConfigurer
{
  @Override
  public void configureViewResolvers(ViewResolverRegistry registry) {
    registry.jsp("/WEB-INF/jsp/",".jsp");
  }

  @Override
  public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
   configurer.enable();
  }
}

我的POJO:

public class Stock 
{
  private String id;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }
}
$(document).ready(function() {
  $("#button2").click(function() {
    $.ajax({
      url: "http://localhost:8080/getid2?",
      data: {
        "Stock": {
          "id": "" + $("#id").val()
        }
      },
      type: "POST",
      contentType: "application/json;charset=UTF-8",
      success: function() {
        console.log("successful upload!")
      },
      error: function() {
        console.log("err!")
      }
    });
  })
});

我在SpringMVC Doc中找到了这个:

@PostMapping("/accounts")
public void handle(@Valid @RequestBody Account account, BindingResult result) 
{
  // ...
}

似乎< code>@RequestBody可以将JSON数据转换成POJO,但是它对我不起作用。我在Chrome上得到错误400

请求负载:

Stock%5Bid%5D=4

JSON分析错误:无法识别的标记“Stock”:应为(“true”、“false”或“null”);嵌套异常为com . faster XML . Jackson . core . jsonparseexception:无法识别的标记“Stock”:应为(“true”、“false”或“null”)` s

原因是什么?

共有1个答案

欧旻
2023-03-14

您正在向后端发送不正确的json:

Stock%5Bid%5D=4

正确的请求正文(由json转换器解析)应该是:

{
  "id": "4"
}

我认为解决办法可能是:

$.ajax({
    ...
    data: '{"id": "4"}', // Also will work JSON.stringify({id: "4"})
    ...
});
 类似资料:
  • 问题内容: 我正在将Jersey用于REST WS,并且得到的响应为JSON。 我想将此响应转换为POJO。怎么做 ? 问题答案: 要在Java和JSON之间进行转换,有很多可供选择的API 。 您可以“手动”遍历JSON组件并提取值以填充Java对象,或者可以使用JSON到Java的绑定API来解决许多低级映射问题。

  • 在我的Oracle数据库中,我有存储为VARCHAR的数量值。从数据库中检索记录时,我希望将它们映射到一个POJO,其中金额值表示为double。不幸的是,我不能使用强制类型,因为在数据库中,所有内容都存储为VARCHAR,并且没有模式将列标识为包含金额值的列。 我正在查看jOOQ转换器,这似乎是我想要的。因此,我为此创建了一个jOOQ转换器: 然而,每当我想使用将数据库记录映射到我的POJO时,

  • 我正在尝试在Apache Camel中将一个简单的JSON文件转换为POJO,但我无法让它工作。 路线.java WeatherForecast.java 天气预报json 我收到的错误是:没有可用的主体类型:java.io.输入流,但具有类型:org.acme.bindy.ftp.天气预报[]on:weather.json.由:没有类型转换器可用于从类型:org.acme.bindy.ftp.天

  • 最近,我开始将我的Android项目从Java转换为Kotlin。我在许多类中使用改型从API获取数据。在我的项目中,有很多POJO,我需要手动将它们转换为数据类,因为它与AndroidStudio的自动转换器工具不兼容。 假设我有模型类: 在Kotlin中有没有什么好方法可以直接将这个模型类转换为数据类?这个类可以手动转换,但我有一些类有大量的变量,手动将其转换为数据类会很麻烦。

  • 我在使用spring-jms模块转换来自RabbitMQ的消息时遇到了一些问题。以前,我使用Rest APIendpoint发送消息,该endpoint将消息发送到RabbitMQ队列,并使用@JMSListener方法处理它。 在内部,这种行为添加了一个字段来确定Java类型,由Spring库管理。但是,现在我想避免Rest API调用,因为它不是必需的,而且我可以直接将消息发送到RabbitM

  • 我试着把POJO转换成protobuf。这和我想做的是一样的。(https://github.com/BAData/protobuf-converter,将协议缓冲区转换为POJO) 但是,它不支持protobuf中的映射类型。所以当我试图转换protobuf的地图时 有什么简单的方法做这项工作吗?