【问题标题】:How to configure jackson object-mapper in spring-servlet.xml for @RequestBody conversion?如何在 spring-servlet.xml 中配置 jackson object-mapper 以进行@RequestBody 转换?
【发布时间】:2019-07-19 12:42:28
【问题描述】:

我想显示一个服务器端的 ajax 数据表。为此,我需要从 Controller 获取数据。

我的请求将是这样的(来自表单):

var form = { "order":"12r34e56e", "state":"open"} 

我的控制器应该将其解析为一个对象,我可以将其发送到 WebService 并从列表中的订单中接收所有打开的包。接收到的列表也必须转换为 JSON 格式才能在表格中显示。

我的标题看起来像

http://localhost:8080/myWebapp/ordernr/getTableData?{%22orderNummer%22:%2212r34e56e%22}&_=1563526347735

我已经成功地尝试了 RequestParam。但我的表单包含更多的 Filterparams,如 date1、date2、Adress 等。所以变数太多了。 而且我尝试注释是徒劳的

consumes=MediaType.APPLICATION_JSON_VALUE

我没有更改我的表单对象类“PreparedStatement”,因为在没有 ajax 的情况下提交我的表单可以正常工作。

在我的 pom.xml

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jackson.version}</version>
</dependency>

在我的控制器中

@Controller
public class Ordernr extends OrderService {
...
@RequestMapping(value="/ordernr/getTableData", method=RequestMethod.GET)
public String getTable(@RequestBody PreparedStatement ps) {
    OrderService().getOrders(ps);
    return result;
}
...

我的 ajax 调用

"ajax": {
    type: "GET",
    url: "${pageContext.request.contextPath}/getTableData",
    contentType:"application/json",
    dataType:"json",
    data: function(data) {
                var form = { "order":"12r34e56e", "state":"open"} 
                return JSON.stringify(form);
          }
    }

我的 JSON 是有效的。我在https://jsonformatter.curiousconcept.com/ 测试过 但我明白了

“解析 HTTP 请求标头时出错。在请求目标中发现无效字符。有效字符在 RFC 7230 和 RFC 3986 中定义”

我想我需要在 spring-servlet.xml 中配置来自 Jackson 的 ObjectMapper,但我不知道该怎么做。

【问题讨论】:

    标签: java spring-mvc jackson-databind


    【解决方案1】:

    我解决了我自己的问题。 首先,我必须在我的 Tomcat server.xml 连接器中添加 RelaxQueryChars='{}'

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" relaxedQueryChars='{}' />
    

    下一件事:Spring 不允许 RequestMethod.GET 的 RequestBody。所以我改为 POST 并且它有效。因为:

    <mvc:annotation-driven /> 
    

    我不必对 jackson objectmapper 进行任何配置。

    【讨论】:

    • 供您自行试用.. 赞!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2023-04-06
    • 1970-01-01
    • 2017-07-17
    • 2022-10-08
    相关资源
    最近更新 更多