Spring:.propertiesファイルアドレスを読み込み、jsonはjavaオブジェクトを転送し、elはjavaクラスメソッドを使用して関連付けます(十三)

18987 ワード

1.Javaで.propertiesファイルを取得するパス(src/main/resourcesの下)
ProjectName
|---src/main/java
|---src/main/resources
  |---test.properties
package xxx.yyy;
public class Utils {
    private String filePath = Utils.class.getClassLoader().getResource("test.properties").getPath();
}

2....properties Keyに対応する値を取得
public String getPropertyConfig(String key) {
        Resource resource = new ClassPathResource("test.properties");
        Properties props = null;
        try {
            props = PropertiesLoaderUtils.loadProperties(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return props.getProperty(key);
    }

3.第2の.properties Key対応値の取得方法
public static String getValueByKey(String key, String filePath) {
        Properties pps = new Properties();
        try {
             InputStream in = new BufferedInputStream (new FileInputStream(filePath));  
             pps.load(in);
             String value = pps.getProperty(key);
             System.out.println(key + " = " + value);
             return value;
             
         }catch (IOException e) {
             e.printStackTrace();
             return null;
         }
    }

4.書き込み修正.properties健値対方法[単健]
public static void WriteProperties (String filePath, String pKey, String pValue) throws IOException {
        Properties pps = new Properties();
         
        InputStream in = new FileInputStream(filePath);
        //           (     ) 
        pps.load(in);
        
        OutputStream out = new FileOutputStream(filePath);
        pps.setProperty(pKey, pValue);
        //      load       Properties      ,  
        //   Properties        (     )       
        pps.store(out, "Update " + pKey + " name");
    }

5. 書き込み修正.properties健値対メソッド[Hashtableから書き込みを読み込む]
public static void WriteProperties(String filePath, Map<String, String> maps) throws IOException {
        Properties pps = new Properties();
         
        InputStream in = new FileInputStream(filePath);
        //           (     ) 
        pps.load(in);

        OutputStream out = new FileOutputStream(filePath);
        
        for (String key : maps.keySet()) {
            pps.setProperty(key, maps.get(key));;
        }
        
        //      load       Properties      ,  
        //   Properties        (     )       
        pps.store(out, "Store properties");
    }

6.json Stringをjavaオブジェクトに変換する.
こんなjava Model[標準POJO];
public class xxModel implements java.io.Serializable {
    private String id;
    private String createName;
    private Date createDate;
    
    public xxModel() {
        
    }
    
    public String getId() {
        return this.id;
    }
    
    public void setId(String id) {
        this.id = id;
    }
    
    public String getCreateName() {
        return this.createName;
    }
    
    public void setCreateName(String createName) {
        this.createName = createName;
    }
    
    public Date getCreateDate() {
        return this.createDate;
    }
    
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

xxModelに変換するjson文字列があります.
String json = "[{\"id\":\"01\",\"createName\":\"admin\",\"createDate\":\"2014-09-02 14:30\"},{...}]";
@SuppressWarnings("unchecked")
    public static <T> List<T> getJavaCollection(T clazz, String jsons) {
        List<T> objs = null;
        JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(jsons);
        // TimestampToDateMorpher
        JSONUtils.getMorpherRegistry().registerMorpher(
                new DateMorpher(new String[] { "yyyy-MM-dd",
                        "yyyy-MM-dd'T'HH:mm", "yyyy-MM-dd'T'HH:mm:ss" }));
        // JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new
        // String[] {"MM/dd/yyyy", "MM/dd/yyyy HH:mm", "MM/dd/yyyy HH:mm:ss"}));
        // JSONUtils.getMorpherRegistry().registerMorpher(new
        // TimestampToDateMorpher());
        if (jsonArray != null) {
            objs = new ArrayList<T>();
            List<T> list = (List<T>) JSONSerializer.toJava(jsonArray);
            for (Object o : list) {
                JSONObject jsonObject = JSONObject.fromObject(o);
                T obj = (T) JSONObject.toBean(jsonObject, clazz.getClass());
                objs.add(obj);
            }
        }
        return objs;
    }

使用方法:
List<xxModel> lists = getJavaCollection(new xxModel(), json);

for (xxModel model: lists) {
    //...
}

上の createDateは日付タイプです. getJavaCollectionメソッドには書かれていません:
JSONUtils.getMorpherRegistry().registerMorpher(
                new DateMorpher(new String[] { "yyyy-MM-dd",
                        "yyyy-MM-dd'T'HH:mm", "yyyy-MM-dd'T'HH:mm:ss" }));

コンパイルは、システムの現在の日付を設定し、年-月-日のフォーマットのみです.時間分秒も取得できず、エラーは表示されません.
json日付をオブジェクト日付に変換する問題については、こちらがどのように設定しても成功しません. getJavaCollectionで関連注釈の一部を削除したコードは、取得したのは年月日だけです.
TimestampToDateMorpherクラスコード:[ネット上でコピー]
public class TimestampToDateMorpher extends AbstractObjectMorpher {
    public Object morph(Object value) {
        if (value != null) {
            return new Date(Long.parseLong(String.valueOf(value)));
        }
        return null;
    }

    @Override
    public Class morphsTo() {
        return Date.class;
    }

    public boolean supports(Class clazz) {
        return Long.class.isAssignableFrom(clazz);
    }
}

最後にxxModelに日付の文字列を追加したコードです.
private String createDateStr;
get setコード略;
次にjsonをjavaオブジェクトに変換すると、次のようになります.
List<xxModel> lists = getJavaCollection(new xxModel(), json);

for (xxModel model: lists) {
    Date date = DateTime.parseDate(model.getCreateDateStr, "yyyy-MM-dd HH:mm");
    model.setCreateDate(date);
    //...
}

DateTimeクラスの下のparseDateコード;
/**
     *          
     * @param strdate
     * @return
     * @throws ParseException 
     */
    public static Date parseDate(String strdate, String dateFormat) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        return sdf.parse(strdate);
    }

また、モデルの日付タイプがHibernateマッピングプロファイルに対応している場合は、マッピングプロファイルのDateタイプを次のように変更する必要があります. timestampはデータテーブルに完全に保存できます.
7.springでデータをコミットするためのRequestMappingメソッド.次のようになります.
@RequestMapping(value = "/xxx", method=RequestMethod.POST)
public String postData(HttpServletRequest req, HttpServletResponse resp) {
    //...
}

場合によっては@ResponseBody注記が必要になります.そうしないと、エラーが発生する可能性があります.
たとえば、プロジェクト・データベース・ドライバがalibabaのdruidを使用している場合、通常は次のエラーが発生します.
java.sql.SQLException: connection holder is null
次のようになります.
 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: getWriter() has already been called for this response 
の問題は、おかしいです.出力ストリームは、すでに何らかの出力方式を使用しているようで、別の方式を使用していると、エラーが発生します.
また、戻り方がStringでなければ、エラー異常が発生する可能性もあります.
8. Caused by: javax.el.PropertyNotFoundException Property 'xxxx' not found on type xxx model
JavaBeans仕様では、プロパティの最初の2文字は大きくても小さくても、小さくてもかまいません.頭文字は小文字でなければなりません.
 
POJO:
private String XxxxName ;//エラー
 
9. JSP--EL式(javaクラスメソッドを呼び出す)
package xxx.yyy;
public class Commons {
    public static String unescapse(String str) {
          //...
          return str;
    }
}

jspページ:
<%@ page import="com.utils.Commons" %> <!--       -->
<jsp:useBean id="commons" class="com.utils.Commons" />

<c:forEach varStatus="vs" var="item" items="${addrs }">
     ${commons.unescape(item.name) }
</c:forEach>

page importメソッドで出力値がありません:${Commons.unescape(item.name)}出力が空です.