天天看點

SpringMVC将對象轉化為JSON時406

最近跟着做淘淘商城項目的時候,出了這麼一個406錯誤,

SpringMVC将對象轉化為JSON時406
這個是Controller中的代碼

@RequestMapping("/items/{itemId}")
    @ResponseBody
    public TbItem getItemById(@PathVariable long itemId) {
        TbItem item=itemService.findItemById(itemId);
        return item;
    }      

這個是tatao-manager-web中json轉換包依賴:

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.7.3</version>
    </dependency>      

這個是po類TbItem

public class TbItem {
    private Long id;

    private String title;

    private String sellPoint;

    private Long price;

    private Integer num;

    private String barcode;

    private String image;

    private Long cid;

    private Byte status;

    private Date created;

    private Date updated;
    //省略getter、setter方法      

注意看一下,這個類現在有一個Date類型的屬性created,懷疑問題出在這,

1、改依賴

<!-- jackson相關依賴包 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.7.4</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.7.4</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.7.4</version>
    </dependency>      

一個包變成了三個包。

2、改springMVC配置檔案

<!-- MappingJackson2HttpMessageConverter處理responseBody 裡面日期類型 xsi:schemaLocation引入版本必須大于等于3.1 -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="dateFormat">
                            <bean class="java.text.SimpleDateFormat">
                                <constructor-arg type="java.lang.String" value="yyyyMMddHHmmss" />
                            </bean>
                        </property>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>      

我的配置檔案名叫springmvc.xml,這一段是全局設定json響應的日期格式,還有另外一種方式,可以去看下面的參考。

OK,再跑一下,出來了,

SpringMVC将對象轉化為JSON時406

雖然問題解決了,但到底是什麼原因導緻的,我現在确定不了,以後進一步學習補上。