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. 第二种获取 .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;
}
}

有这么一串 json 字符串,要转化为 xxModel:

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);
}

另外,如果 model 中日期类型 有与 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 规范,属性的前两个字母不能是一大一小,或者是一小一大。开头字母要小写才行。
 
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)} 输出为 空;

Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)的更多相关文章

  1. 如何通过Spring读取Properties文件

    1 在Spring中配置文件中, 配置配置文件的引用     <util:properties id="settings" location="/WEB-INF/c ...

  2. Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件

    一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java ...

  3. spring 读取properties文件--通过注解方式

    问题: 需要通过properties读取页面的所需楼盘的名称.为了以后便于修改. 解决: 可以通过spring的 PropertiesFactoryBean 读取properties属性,就不需要自己 ...

  4. 201771010113 李婷华 《面向java对象程序设计(Java)》第四章学习总结

    一. 理论知识部分 第四章 对象与类 本章主要讲述面向对象程序设计.如何创建标准Java类库中的类对象.如何编写自己的类. 1.面向对象程序设计的几个主要概念: 抽象数据类型.类和对象.封装.类层次( ...

  5. Spring读取properties资源文件

    我们知道可以通过读取资源文件流后加载到Properties对象,再使用该对象方法来获取资源文件.现在介绍下利用Spring内置对象来读取资源文件. 系统启动时加载资源文件链路:web.xml --&g ...

  6. spring读取properties和其他配置文件的几种方式

    1.因为spring容器的一些机制,在读取配置文件进行数据库的配置等等是很有必要的,所以我们要考虑配置文件的的读取方式以及各个方式的实用性 2.配置文件的读取方式我这里介绍2种,目的是掌握这2种就可以 ...

  7. spring读取properties的方法

    首先在配置文件中配置PropertyPlaceholderConfigurer 单个配置文件: <bean id="propertyConfigurer" class=&qu ...

  8. spring 读取properties的两种方法

    一:直接使用context命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi= ...

  9. spring读取properties文件

    1.方式一 <util:properties id="meta" location="classpath:config/metainfo.properties&qu ...

随机推荐

  1. OpenGL 笔记 <2> Compiling and Linking a shader program

    Preface 这一节所有的主要内容都在一个OpenGL库文件中<LoadShaders.h> ,只需要用LoadShader()函数进行加载即可.但是由于老是出错,所以自己实现了一下,也 ...

  2. Spark RDD深度解析-RDD计算流程

    Spark RDD深度解析-RDD计算流程 摘要  RDD(Resilient Distributed Datasets)是Spark的核心数据结构,所有数据计算操作均基于该结构进行,包括Spark ...

  3. 谷歌算法研究员:我为什么钟爱PyTorch?

    老铁们好!我是一名前谷歌的算法研究员,处理深度学习相关项目已有三年经验,接下来会在平台上给大家分享一些深度学习,计算机视觉和统计机器学习的心得体会,当然了内推简历一定是收的.这篇文章,不想说太多学术的 ...

  4. django反向解析URL和URL命名空间

    django反向解析URL和URL命名空间 首先明确几个概念: 1.在html页面上的内容特别是向用户展示的url地址,比如常见的超链接,图片链接等,最好能动态生成,而不要固定. 2.一个django ...

  5. MSSQL批量写入数据方案

    近来有一个项目Feature需要有批量写入数据的场景,正巧整理资料发现自己以前也类似实现的项目,在重构的同时把相关资料做了一个简单的梳理,方便大家参考. 循环写入(简单粗暴,毕业设计就这样干的)(不推 ...

  6. 第二个spring冲刺第3天

    今天天气突然变得很冷,所以我们队的人都有少许的不适.加上天气比较冷,我们都不怎么想做.幸好在队长的提醒下,我们终于继续投入研发的工作中.由于市面上的同类软件的数量不少所以我们下载了一些来看,希望能找到 ...

  7. bing背单词交互流程 - Chongyang Bai

    昨天和travis,钟秋开会确认了bing背单词的手机界面交互流程.我在这里简单描述一下,设计页面暂时不能贴出来,期待大家的宝贵意见 b( ̄▽ ̄)d. 单词本浏览界面:单词本被分为两类,用户单词本和单 ...

  8. 基于OVS的VLAN虚拟化简易实践方案

    基于OVS的VLAN虚拟化简易实践方案 前言 本实验基于ovs的vlan流表匹配,根据端口进行vlan标签插入.手工配置ovs,使其具有vlan虚拟化方案. 实验拓扑 ---- ---- | h1 | ...

  9. ElasticSearch 5.6.1 安装 Kibana、X-Pack和head

    前面已经有写过ElasticSearch和iK的安装了这里就不在所了. 安装Kiabna 在下载tar包的时候需要注意下一安装的es版本号,按照官网的说明版本是对应一致的. https://www.e ...

  10. Docker inside Docker 基于 Alpine Linux

    Study From https://hub.docker.com/_/docker/ 感慨一句 这些人真牛B .. 简单测试 拉取镜像 docker pull docker:dind 运行镜像 do ...