1. 程式人生 > 實用技巧 >MyBatis之動態SQL

MyBatis之動態SQL

JSON

JSON (JavaScript Object Notation) 是一種輕量級的資料交換格式。JSON 是 JS 物件的字串表示法,它使用文字表示一個 JS 物件的資訊,本質是一個字串

1、JSON 和 JS 物件互轉

var user = {
    name: "小斑鳩",
    motto: "Hello World"
}

// JS物件轉換為JSON字串,使用 JSON.stringify()
var str = JSON.stringify(user);

// JSON字串轉換為JS物件,使用 JSON.parse()
var obj = JSON.parse(str);

json資料表示:

{
	"name": "小斑鳩",
	"motto": "Hello World"
}
  • 花括號儲存物件
  • 方括號儲存陣列

2、使用 Controller 實現返回 JSON 資料

正常返回會走檢視解析器,市面上有很多第三方jar包可以實現返回字串,如jackson

1)、導包

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.3</version>
</dependency>

2)、@ResponseBody,將伺服器端返回的物件轉換為json物件響應回去。

@ResponseBody
public String json(){
    User user = new User("小斑鳩","Hello World");
    return new ObjectMapper().writeValueAsString(user);
}

3)、若出現亂碼問題,需要設定一下編碼格式,以及它返回的型別。

  • 通過@RequestMapping的produces屬性來實現
@RequestMapping(value = "/xxx", produces = "application/json;charset=utf-8")
  • 通過配置檔案實現
<!--springmvc 統一解決json中文亂碼問題-->
<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8"/>
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                    <property name="failOnEmptyBeans" value="false"/>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

4)、返回Date問題。

  • 時間預設返回的json字串變成時間戳格式:Timestamp,需關閉它的時間戳功能。
@ResponseBody
public String json() throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    
    //關閉時間戳功能
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TEMESTAMPS, false);
    
    //時間格式化:自定日期格式物件
    objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    
    return objectMapper.writeValueAsString(new Date());
}