SpringMVC:JSON
39030 ワード
SpringMVC:JSON解説
JSONとは
JSON(JavaScript Object Notation、JSオブジェクトマーク)は、軽量級のデータ交換フォーマットで、現在は特に広く使われています.プログラム言語とは完全に独立したテキスト形式を使用して、データを格納し、表示します.簡潔で明瞭な階層構造はJSONを理想的なデータ交換言語にする.読みや編纂が容易であり、機械解析や生成も容易であり、効率的にネットワーク伝送を向上させる.JavaScript言語では、すべて対象です.したがって、どのようなJavaScriptでもサポートされているタイプは、文字列、数字、オブジェクト、配列などのJSONによって表されてもよい.彼の要求と文法のフォーマットを見てください.
オブジェクトはキーパッドペアとして表示され、データはカンマ区切りかっこ保存オブジェクト大かっこ保存配列JSONキーの値はJavaScriptオブジェクトを保存するための方法です.JavaScriptオブジェクトの書き方も大同小異です.キー/値はグループのキー名に対して前に書いて、ダブルクォーテーションマークで包んで、コロンを使います.
JSONはJavaScriptオブジェクトの文字列表示法で、テキストを使ってJSオブジェクトの情報を表しています.本質は文字列です.
JSON文字列からJavaScriptオブジェクトに変換するために、JSON.parseを使用する方法:
新しいmodule、springmvc-05-json、webのサポートを追加します.
webディレクトリの下にjson-1を新設し、試験内容を作成する
IDEAでブラウザを使って開き、コンソール出力を確認します.ControllerはJSONデータに戻ります.
Jacksonは現在の比較的良いjson解析ツールであるべきです.
もちろん工具はこれだけではないです.例えばアリババのfastjsonなどがあります.私達はJacksonを使って、そのjarカバンを導入したいです.
Controllerを作成する.
文字化けの問題が発見されました.彼の符号化フォーマットはutf-8であり、戻りのタイプを設定したいです.コード
再度テストします http://localhost:8080/json1 文字化け問題OK!==【注意:jsonを使って文字化けの問題を覚えてください】==
コードの最適化
文字化け統一解決
前の方法は比較的に面倒で、もしプロジェクトの中で多くの要求があるならば、すべて追加して、Spring配置を通して統一的に指定することができて、このように毎回すべて処理しなくてもいいです!
springmvcのプロファイルにStringHttp Message Coverter変換プロファイルを追加できます.
クラスで直接使用する @Reset Controller ,このように、中のすべての方法はjson文字列に戻ります.もうどれも@ResonseBodyを追加しなくてもいいです.私達は前後の端で分離開発しています.普通は@RertControllerを使っています.とても便利です.
テストセット出力
新しい方法を追加します.
出力時間オブジェクト
新しい方法を追加します.
標準の日付書式は数字になります.1970年1月1日から現在の日付までのミリ秒数です.Jacksonはデフォルトでは時間をtimestamps形式に変えます.
ソリューション:timestamps形式をキャンセルし、時間の書式をカスタマイズします.
抽出ツール類
よく使うなら、このようにするのは面倒くさいです.これらのコードを一つのツールに入れることができます.私達は編集に行きます
FastJson
fastjson.jarはアリが開発したJava開発用のカバンで、JsonオブジェクトとJavaBeanオブジェクトの変換を簡単に実現できます.JavaBeanオブジェクトとjson文字列の変換を実現し、jsonオブジェクトとjva文字列の変換を実現します.jsonを実現する変換方法はとても多くて、最後の実現結果はすべて同じです.
fastjsonのpom依存!
【JSONObject代表json対象】
JSONObjectはMapインターフェースを実現しました.JSONObjectの底の操作はMapによって実現されると予想しています.JSONObjectはjsonオブジェクトに対応しており、様々な形のget()によりjsonオブジェクト中のデータを取得することができ、size()、isEmpty()などの方法で「キー:値」ペアの個数と判定が空かどうかを取得することもできます.その本質は,Mapインターフェースを実現し,インターフェース内の方法を呼び出すことによって達成される.【JSONArrayはJsonオブジェクト配列を表す】
内部にはListインターフェース内の方法があり、操作を完了します.【JSON代表JSONObjectとJSONArrayの転化】
JSONのソースコードの分析と使用
これらの方法を注意深く観察すると、主にjsonオブジェクト、jsonオブジェクト配列、javabeanオブジェクト、json文字列間の相互変換が実現されます.コードテストは、FastJson Demoクラスを新設します.
記事の起源はhttps://blog.kuangstudy.com/index.php/archives/480/このブログの主、権利侵害は削除に連絡してください.
https://blog.kuangstudy.com/index.php/archives/480/
JSONとは
JSON(JavaScript Object Notation、JSオブジェクトマーク)は、軽量級のデータ交換フォーマットで、現在は特に広く使われています.プログラム言語とは完全に独立したテキスト形式を使用して、データを格納し、表示します.簡潔で明瞭な階層構造はJSONを理想的なデータ交換言語にする.読みや編纂が容易であり、機械解析や生成も容易であり、効率的にネットワーク伝送を向上させる.JavaScript言語では、すべて対象です.したがって、どのようなJavaScriptでもサポートされているタイプは、文字列、数字、オブジェクト、配列などのJSONによって表されてもよい.彼の要求と文法のフォーマットを見てください.
オブジェクトはキーパッドペアとして表示され、データはカンマ区切りかっこ保存オブジェクト大かっこ保存配列JSONキーの値はJavaScriptオブジェクトを保存するための方法です.JavaScriptオブジェクトの書き方も大同小異です.キー/値はグループのキー名に対して前に書いて、ダブルクォーテーションマークで包んで、コロンを使います.
{"name": "QinJiang"}
{"age": "3"}
{"sex": " "}
多くの人はJSONとJavaScriptの対象の関係がよく分かりません.誰が誰なのかさえ分かりません.実は、このように理解できます.JSONはJavaScriptオブジェクトの文字列表示法で、テキストを使ってJSオブジェクトの情報を表しています.本質は文字列です.
var obj = {a: 'Hello', b: 'World'}; // ,
var json = '{"a": "Hello", "b": "World"}'; // JSON ,
JSONとJavaScriptのオブジェクトは互いに回転します.JSON文字列からJavaScriptオブジェクトに変換するために、JSON.parseを使用する方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}');
// {a: 'Hello', b: 'World'}
JavaScriptオブジェクトからJSON文字列に変換するために、JSON.strigifyを使用する方法:var json = JSON.stringify({a: 'Hello', b: 'World'});
// '{"a": "Hello", "b": "World"}'
コードテスト新しいmodule、springmvc-05-json、webのサポートを追加します.
webディレクトリの下にjson-1を新設し、試験内容を作成する
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON_ title>
head>
<body>
<script type="text/javascript">
// js
var user = {
name:" ",
age:3,
sex:" "
};
// js json
var str = JSON.stringify(user);
console.log(str);
// json js
var user2 = JSON.parse(str);
console.log(user2.age,user2.name,user2.sex);
script>
body>
html>
.IDEAでブラウザを使って開き、コンソール出力を確認します.ControllerはJSONデータに戻ります.
Jacksonは現在の比較的良いjson解析ツールであるべきです.
もちろん工具はこれだけではないです.例えばアリババのfastjsonなどがあります.私達はJacksonを使って、そのjarカバンを導入したいです.
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.8version>
dependency>
SpringMVCの配置に必要な配置web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>SpringMVCservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc-servlet.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>SpringMVCservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
<filter>
<filter-name>encodingfilter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>utf-8param-value>
init-param>
filter>
<filter-mapping>
<filter-name>encodingfilter-name>
<url-pattern>/url-pattern>
filter-mapping>
web-app>
スプリングmvc-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.kuang.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
bean>
beans>
私達は勝手にUserの実体類を編纂して、それから私達は私達のテストControllerを編纂します.package com.kuang.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
// lombok
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
private String sex;
}
ここでは二つの新しいものが必要です.一つは@ResonseBodyです.一つはObject Mapperオブジェクトです.具体的な使い方を見てみます.Controllerを作成する.
@Controller
public class UserController {
@RequestMapping("/json1")
@ResponseBody
public String json1() throws JsonProcessingException {
// jackson ,
ObjectMapper mapper = new ObjectMapper();
//
User user = new User(" 1 ", 3, " ");
// json
String str = mapper.writeValueAsString(user);
// @ResponseBody , str json ;
return str;
}
}
Tomcatを設定して、テストを開始します.http://localhost:8080/json1 文字化けの問題が発見されました.彼の符号化フォーマットはutf-8であり、戻りのタイプを設定したいです.コード
//produces:
@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")
は、@Request Mapingのproduces属性によって実装される.再度テストします http://localhost:8080/json1 文字化け問題OK!==【注意:jsonを使って文字化けの問題を覚えてください】==
コードの最適化
文字化け統一解決
前の方法は比較的に面倒で、もしプロジェクトの中で多くの要求があるならば、すべて追加して、Spring配置を通して統一的に指定することができて、このように毎回すべて処理しなくてもいいです!
springmvcのプロファイルにStringHttp Message Coverter変換プロファイルを追加できます.
<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>
Json文字列を返します.クラスで直接使用する @Reset Controller ,このように、中のすべての方法はjson文字列に戻ります.もうどれも@ResonseBodyを追加しなくてもいいです.私達は前後の端で分離開発しています.普通は@RertControllerを使っています.とても便利です.
@RestController
public class UserController {
//produces:
@RequestMapping(value = "/json1")
public String json1() throws JsonProcessingException {
// jackson ,
ObjectMapper mapper = new ObjectMapper();
//
User user = new User(" 1 ", 3, " ");
// json
String str = mapper.writeValueAsString(user);
// @ResponseBody , str json ;
return str;
}
}
tomcatテストを起動して、結果は正常に出力されます.テストセット出力
新しい方法を追加します.
@RequestMapping("/json2")
public String json2() throws JsonProcessingException {
// jackson ,
ObjectMapper mapper = new ObjectMapper();
//
User user1 = new User(" 1 ", 3, " ");
User user2 = new User(" 2 ", 3, " ");
User user3 = new User(" 3 ", 3, " ");
User user4 = new User(" 4 ", 3, " ");
List list = new ArrayList();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
// json
String str = mapper.writeValueAsString(list);
return str;
}
運行結果:完璧です.何の問題もありません.出力時間オブジェクト
新しい方法を追加します.
@RequestMapping("/json3")
public String json3() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
// ,java.util.Date
Date date = new Date();
// json
String str = mapper.writeValueAsString(date);
return str;
}
実行結果:標準の日付書式は数字になります.1970年1月1日から現在の日付までのミリ秒数です.Jacksonはデフォルトでは時間をtimestamps形式に変えます.
ソリューション:timestamps形式をキャンセルし、時間の書式をカスタマイズします.
@RequestMapping("/json4")
public String json4() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
//
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//
mapper.setDateFormat(sdf);
Date date = new Date();
String str = mapper.writeValueAsString(date);
return str;
}
運転結果:時間の出力に成功しました.抽出ツール類
よく使うなら、このようにするのは面倒くさいです.これらのコードを一つのツールに入れることができます.私達は編集に行きます
package com.kuang.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.text.SimpleDateFormat;
public class JsonUtils {
public static String getJson(Object object) {
return getJson(object,"yyyy-MM-dd HH:mm:ss");
}
public static String getJson(Object object,String dateFormat) {
ObjectMapper mapper = new ObjectMapper();
//
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
//
mapper.setDateFormat(sdf);
try {
return mapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
私達はツール類を使って、コードは更に簡潔になりました.@RequestMapping("/json5")
public String json5() throws JsonProcessingException {
Date date = new Date();
String json = JsonUtils.getJson(date);
return json;
}
大仕事が完成するパーフェクトFastJson
fastjson.jarはアリが開発したJava開発用のカバンで、JsonオブジェクトとJavaBeanオブジェクトの変換を簡単に実現できます.JavaBeanオブジェクトとjson文字列の変換を実現し、jsonオブジェクトとjva文字列の変換を実現します.jsonを実現する変換方法はとても多くて、最後の実現結果はすべて同じです.
fastjsonのpom依存!
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.60version>
dependency>
fastjsonの三つの主要な種類:【JSONObject代表json対象】
JSONObjectはMapインターフェースを実現しました.JSONObjectの底の操作はMapによって実現されると予想しています.JSONObjectはjsonオブジェクトに対応しており、様々な形のget()によりjsonオブジェクト中のデータを取得することができ、size()、isEmpty()などの方法で「キー:値」ペアの個数と判定が空かどうかを取得することもできます.その本質は,Mapインターフェースを実現し,インターフェース内の方法を呼び出すことによって達成される.【JSONArrayはJsonオブジェクト配列を表す】
内部にはListインターフェース内の方法があり、操作を完了します.【JSON代表JSONObjectとJSONArrayの転化】
JSONのソースコードの分析と使用
これらの方法を注意深く観察すると、主にjsonオブジェクト、jsonオブジェクト配列、javabeanオブジェクト、json文字列間の相互変換が実現されます.コードテストは、FastJson Demoクラスを新設します.
package com.kuang.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.kuang.pojo.User;
import java.util.ArrayList;
import java.util.List;
public class FastJsonDemo {
public static void main(String[] args) {
//
User user1 = new User(" 1 ", 3, " ");
User user2 = new User(" 2 ", 3, " ");
User user3 = new User(" 3 ", 3, " ");
User user4 = new User(" 4 ", 3, " ");
List list = new ArrayList();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
System.out.println("*******Java JSON *******");
String str1 = JSON.toJSONString(list);
System.out.println("JSON.toJSONString(list)==>"+str1);
String str2 = JSON.toJSONString(user1);
System.out.println("JSON.toJSONString(user1)==>"+str2);
System.out.println("
****** JSON Java *******");
User jp_user1=JSON.parseObject(str2,User.class);
System.out.println("JSON.parseObject(str2,User.class)==>"+jp_user1);
System.out.println("
****** Java JSON ******");
JSONObject jsonObject1 = (JSONObject) JSON.toJSON(user2);
System.out.println("(JSONObject) JSON.toJSON(user2)==>"+jsonObject1.getString("name"));
System.out.println("
****** JSON Java ******");
User to_java_user = JSON.toJavaObject(jsonObject1, User.class);
System.out.println("JSON.toJavaObject(jsonObject1, User.class)==>"+to_java_user);
}
}
このようなツール類は、私達は使うことを身につけるだけでいいです.使う時は具体的な業務によって対応の実現を探します.昔のcommons-inoのようなツールバッグと同じように、持ってきて使えばいいです.記事の起源はhttps://blog.kuangstudy.com/index.php/archives/480/このブログの主、権利侵害は削除に連絡してください.
https://blog.kuangstudy.com/index.php/archives/480/