Java開發過程中遇到的問題及解決方法


1、SpringMVC前台提交參數綁定list時大小超過256

  解決方案:①在使用該方法的類上添加方法修改默認長度

  @InitBinde
  public void initBinder(WebDataBinder binder) {
    //長度根據實際情況修改
    binder.setAutoGrowCollectionLimit(500);

  }

 

  ② 在整個項目中使用

  定義一個初始化類

public class myInitializer implements WebBindingInitializer {
    @Override
    public void initBinder(WebDataBinder binder) {
       binder.setAutoGrowCollectionLimit(100000);
    }

  }

   然后在配置文件中配置

  <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

    <property name="webBindingInitializer">

      <bean class="xxx.myInitializer"/> //class指myInitializer類

    </property>

  </bean>

 

 

2、get方式請求后台時,由於參數中帶有特殊字符&導致異常

  前端傳遞參數時使用encodeURIComponent方法進行重新編碼,后端因為spring默認會進行一次解碼操作,所以可以直接獲取。

 

3、使用hql語句對其中的日期屬性和當前日期進行過濾時,直接使用new Date()導致的問題

  可以先把當前日期轉成字符串然后再進行過濾(配合Date和Calender類)

 

4、sql語句處理分組的時候,在本地服務使用沒問題,在服務器上出現sql異常

  group by語句規范,本地安裝的MySQL,對group by進行了泛化,而服務器是Linux,只會按照標准來執行。

  解決:嚴格按照group by規范書寫sql語句

  select list from table group by cause;

  ①確保每組單值(確保查詢列表都是單一的值)

  ②查詢列表中包含聚合函數(效果也是同1)

  ③查詢列是group by中的列

  ④查詢列是功能性的依賴於group by中的列 

 

5、程序運行效率低

  問題:程序設計使用大量for循環嵌套sql查詢,加大流操作,造成查詢緩慢。

  解決:一次查詢,多次使用。將需要的數據進行一次性查詢並存放於Map中,需要的使用利用判斷條件代替for循環查詢。

 

6、使用zookeeper注冊服務時,API調用方法失敗,拋出方法找不到的異常信息。

  ①檢查方法是否存在

  ②檢查配置文件中zookeeper的注冊地址是否一致

 

7、循環刪除list中的數據(使用Iterator)

 

8、設置MySQL區分大小寫

  在MySQL的配置文件my.ini中增加一行:

        lower_case_table_names = 0

        其中 0:區分大小寫,1:不區分大小寫

 

9、獲取操作人IP

public static String getIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM