Ver Fonte

模糊查询;
Get参数乱码;

詹子聪 há 5 anos atrás
pai
commit
3703dd50d8

+ 15 - 1
src/main/java/com/miekir/shibei/controller/api/GoodsController.java

@@ -13,6 +13,7 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.UnsupportedEncodingException;
 import java.util.List;
 import java.util.Map;
 
@@ -143,6 +144,17 @@ public class GoodsController {
     @RequestMapping(value = "/api/getGoodsListByKeyword", method = RequestMethod.GET, produces = "application/json; charset=utf-8")
     @ResponseBody
     public String getGoodsListByKeyword(String keywords, int pageNum, int pageSize) {
+        String keywordsUtf8 = null;
+        if (!TextUtils.isEmpty(keywords)) {
+            try {
+                keywordsUtf8 = new String(keywords.getBytes("ISO8859-1"), "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                keywordsUtf8 = keywords;
+                e.printStackTrace();
+            }
+        }
+
+
         ResponseResult<List<GoodsBean>> responseResult = new ResponseResult<List<GoodsBean>>();
         responseResult.setMessage("获取失败");
 
@@ -150,7 +162,9 @@ public class GoodsController {
         List<GoodsBean> goodsBeanList;
         try {
             // 如果pageNum为1,pageSize为20,则查询第1*20条到第1*20+20-1(这里的第几条是从0开始的)
-            goodsBeanList = goodsRepository.getGoodsListByKeyword(keywords, pageNum*pageSize, pageSize);
+            // 模糊查询,要拼上%%
+            keywordsUtf8 = "%"+keywordsUtf8+"%";
+            goodsBeanList = goodsRepository.getGoodsListByKeyword(keywordsUtf8, pageNum*pageSize, pageSize);
         } catch (Exception e) {
             e.printStackTrace();
             return JSON.toJSONString(responseResult);

+ 12 - 1
src/main/java/com/miekir/shibei/controller/api/JsonController.java

@@ -16,6 +16,7 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.UnsupportedEncodingException;
 import java.util.List;
 
 @Controller
@@ -39,6 +40,16 @@ public class JsonController {
     @ResponseBody
     public String getWeather(String token, String city) {
         WeatherBean weatherBean = new WeatherBean();
+        // get过来的参数,会乱码
+        String cityUtf8 = null;
+        if (!TextUtils.isEmpty(city)) {
+            try {
+                cityUtf8 = new String(city.getBytes("ISO8859-1"), "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                cityUtf8 = city;
+                e.printStackTrace();
+            }
+        }
 
         // 根据token查找用户
         /*User dbUserBean;
@@ -65,7 +76,7 @@ public class JsonController {
 //            mWeatherBean = WebTool.getWeatherInfo(weatherBean, city);
 //            mLastWeatherDate = currentDate;
 //        }
-        WebTool.getWeatherInfo(weatherBean, city);
+        WebTool.getWeatherInfo(weatherBean, cityUtf8);
         return JSON.toJSONString(weatherBean);
     }
 

+ 2 - 2
src/main/java/com/miekir/shibei/repository/GoodsRepository.java

@@ -23,8 +23,8 @@ public interface GoodsRepository extends JpaRepository<GoodsBean, Integer> {
     @Query(value="select goodsBean from GoodsBean goodsBean where goodsBean.id=:id")
     public GoodsBean findGoodsById(@Param("id") Long id);
 
-    // 使用原生SQL MYSQL 不支持TOP,要用连接符号||连接,否则会被当成字符串常量拼成%?1%
-    @Query(value="SELECT * FROM t_goods where title like '%'||?1||'%' limit ?2, ?3", nativeQuery = true)
+    // 使用原生SQL MYSQL 不支持TOP,要用连接符号|连接,否则会被当成字符串常量拼成%?1%
+    @Query(value="SELECT * FROM t_goods where title like ?1 limit ?2, ?3", nativeQuery = true)
     public List<GoodsBean> getGoodsListByKeyword(String keywords, int startNum, int pageSize);
 
 

+ 5 - 1
src/main/webapp/WEB-INF/web.xml

@@ -17,7 +17,11 @@
         <url-pattern>/</url-pattern>
     </servlet-mapping>
 
-    <!--  为了能够处理中文的post请求,再配置一个encodingFilter,以避免post请求中文出现乱码情况 -->
+    <!--  为了能够处理中文的post请求,再配置一个encodingFilter,以避免post请求中文出现乱码情况,但是没有解决get请求的中文乱码,
+    需要在Tomcat的server.xml增加: -->
+    <!--<Connector port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" URIEncoding="UTF-8"/>-->
     <filter>
         <filter-name>encodingFilter</filter-name>
         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>