@RequestMapping
にproduces="application/json;charset=UTF-8"
に設定を追加れば文字化けしなくなるかと。
java
1@RequestMapping(value = "/test", method = RequestMethod.POST, produces="application/json;charset=UTF-8)
2@ResponseBody
3public String child_kensaku(@RequestBody String inputdata , HttpServletRequest request, HttpServletResponse response, HttpSession session, SessionStatus sessionstatus
4 ) throws IllegalArgumentException, IllegalAccessException, ParseException, JsonProcessingException{
5 ObjectMapper mapper = new ObjectMapper();
6 String ret = mapper.writeValueAsString(jsonstr); //jsonstrに日本語のデータがある
7
8 return ret;
9}
検証してみましが、Mappingがうまくいかず、メソッドが呼び出せません。
という状況が再現できませんでした。
再現に使用したソースは以下の通りとなります
JDK8 u77
Eclipse 4.5 mars2
Tomcat 8.0.33 with log4j1.2
spring-webmvc 4.2.5.RELEASE
TestController.java
java
1package sandbox.slp.mvc;
2
3import java.text.ParseException;
4import java.util.Arrays;
5import java.util.List;
6import java.util.Map;
7
8import javax.servlet.http.HttpServletRequest;
9import javax.servlet.http.HttpServletResponse;
10import javax.servlet.http.HttpSession;
11
12import org.slf4j.Logger;
13import org.slf4j.LoggerFactory;
14import org.springframework.stereotype.Controller;
15import org.springframework.web.bind.annotation.RequestBody;
16import org.springframework.web.bind.annotation.RequestMapping;
17import org.springframework.web.bind.annotation.RequestMethod;
18import org.springframework.web.bind.annotation.ResponseBody;
19import org.springframework.web.bind.support.SessionStatus;
20
21import com.fasterxml.jackson.core.JsonProcessingException;
22
23@Controller
24public class TestController {
25
26 private static final Logger log = LoggerFactory.getLogger(TestController.class);
27
28 @RequestMapping(value = "/test/1", produces = "application/json;charset=UTF-8")
29 @ResponseBody
30 public String child_kensaku(@RequestBody String inputdata, HttpServletRequest request, HttpServletResponse response,
31 HttpSession session, SessionStatus sessionstatus)
32 throws IllegalArgumentException, IllegalAccessException, ParseException, JsonProcessingException {
33 log.info(inputdata);
34 return "{ \"name\":\"日本語\"}";
35 }
36}
index.html
html
1<!DOCTYPE html>
2<html>
3<head>
4<title>jQuery ajax POST sample</title>
5<script
6 src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
7<script>
8 $(function() {
9 $("#ajax_btn").click(function ajaxpost() {
10 var formData = {
11 name : "日本語文字列入お名前",
12 age : "31"
13 };
14
15 $.ajax({
16 url : "test/1/",
17 type : "POST",
18 data : JSON.stringify(formData),
19 contentType : 'application/json;charset=UTF-8', // リクエストの Content-Type
20 dataType : "json", // レスポンスをJSONとしてパースする
21 success : function(data, textStatus, jqXHR) {
22 //data - response from server
23 console.log(data);
24 },
25 error : function(jqXHR, textStatus, errorThrown) {
26
27 }
28 });
29 });
30 });
31</script>
32</head>
33
34<body>
35 <input id="ajax_btn" type="button" value="1押す" />
36</body>
37</html>
servlet-context.xml
xml
1<?xml version="1.0" encoding="UTF-8"?>
2<beans:beans
3 xmlns:mvc="http://www.springframework.org/schema/mvc"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:beans="http://www.springframework.org/schema/beans"
6 xmlns:context="http://www.springframework.org/schema/context"
7 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
8 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
10 <mvc:annotation-driven />
11 <mvc:resources
12 mapping="/resources/**"
13 location="/resources/" />
14 <mvc:resources
15 mapping="/*"
16 location="/" />
17</beans:beans>
pom.xml
xml
1<?xml version="1.0" encoding="UTF-8"?>
2<project
3 xmlns="http://maven.apache.org/POM/4.0.0"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
6 <modelVersion>4.0.0</modelVersion>
7 <groupId>sandbox</groupId>
8 <artifactId>sandbox.slp</artifactId>
9 <name>sandbox.slp</name>
10 <packaging>war</packaging>
11 <version>1.0.0-BUILD-SNAPSHOT</version>
12 <properties>
13 <org.springframework-version>4.2.5.RELEASE</org.springframework-version>
14 </properties>
15 <dependencies>
16 <!-- Spring -->
17 <dependency>
18 <groupId>org.springframework</groupId>
19 <artifactId>spring-webmvc</artifactId>
20 <version>${org.springframework-version}</version>
21 </dependency>
22 <dependency>
23 <groupId>ch.qos.logback</groupId>
24 <artifactId>logback-classic</artifactId>
25 <version>1.1.7</version>
26 </dependency>
27 <dependency>
28 <groupId>javax.servlet</groupId>
29 <artifactId>javax.servlet-api</artifactId>
30 <version>3.1.0</version>
31 <scope>provided</scope>
32 </dependency>
33 <dependency>
34 <groupId>javax.servlet.jsp</groupId>
35 <artifactId>javax.servlet.jsp-api</artifactId>
36 <version>2.3.1</version>
37 <scope>provided</scope>
38 </dependency>
39 <dependency>
40 <groupId>javax.servlet</groupId>
41 <artifactId>jstl</artifactId>
42 <version>1.2</version>
43 </dependency>
44 <dependency>
45 <groupId>com.fasterxml.jackson.core</groupId>
46 <artifactId>jackson-databind</artifactId>
47 <version>2.7.3</version>
48 </dependency>
49 <dependency>
50 <groupId>com.fasterxml.jackson.core</groupId>
51 <artifactId>jackson-core</artifactId>
52 <version>2.7.3</version>
53 </dependency>
54 <dependency>
55 <groupId>com.fasterxml.jackson.core</groupId>
56 <artifactId>jackson-annotations</artifactId>
57 <version>2.7.3</version>
58 </dependency>
59 </dependencies>
60</project>
サーバ側でのログ出力
17:52:49.271 [http-nio-8080-exec-25] INFO sandbox.slp.mvc.TestController - {"name":"日本語文字列入お名前","age":"31"}
クライアント側でのログ出力
また、以下の依存関係を追加し、オブジェクトのままjsonstr
を返却すれば@RequestMapping(value = "/test")
のみで文字化けせずにJSONデータとして返却されるようになります。
maven
1<dependency>
2 <groupId>com.fasterxml.jackson.core</groupId>
3 <artifactId>jackson-databind</artifactId>
4 <version>2.7.3</version>
5</dependency>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/18 01:57 編集
2016/04/22 07:59