Spring:.propertiesファイルアドレスを読み込み、jsonはjavaオブジェクトを転送し、elはjavaクラスメソッドを使用して関連付けます(十三)
18987 ワード
1.Javaで.propertiesファイルを取得するパス(src/main/resourcesの下)
ProjectName
|---src/main/java
|---src/main/resources
|---test.properties
2....properties Keyに対応する値を取得
3.第2の.properties Key対応値の取得方法
4.書き込み修正.properties健値対方法[単健]
5. 書き込み修正.properties健値対メソッド[Hashtableから書き込みを読み込む]
6.json Stringをjavaオブジェクトに変換する.
こんなjava Model[標準POJO];
xxModelに変換するjson文字列があります.
String json = "[{\"id\":\"01\",\"createName\":\"admin\",\"createDate\":\"2014-09-02 14:30\"},{...}]";
使用方法:
上の createDateは日付タイプです. getJavaCollectionメソッドには書かれていません:
コンパイルは、システムの現在の日付を設定し、年-月-日のフォーマットのみです.時間分秒も取得できず、エラーは表示されません.
json日付をオブジェクト日付に変換する問題については、こちらがどのように設定しても成功しません. getJavaCollectionで関連注釈の一部を削除したコードは、取得したのは年月日だけです.
TimestampToDateMorpherクラスコード:[ネット上でコピー]
最後にxxModelに日付の文字列を追加したコードです.
private String createDateStr;
get setコード略;
次にjsonをjavaオブジェクトに変換すると、次のようになります.
DateTimeクラスの下のparseDateコード;
また、モデルの日付タイプがHibernateマッピングプロファイルに対応している場合は、マッピングプロファイルのDateタイプを次のように変更する必要があります. timestampはデータテーブルに完全に保存できます.
7.springでデータをコミットするためのRequestMappingメソッド.次のようになります.
場合によっては@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クラスメソッドを呼び出す)
jspページ:
page importメソッドで出力値がありません:${Commons.unescape(item.name)}出力が空です.
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)}出力が空です.