JSONUtils.parse解析数据库取出的JSON字符串报错

本人在oracle取出字符串然后用JSONUtils.parse解析强转成hashmap报错

String csc = gzMx.getCsc();
System.out.println(csc);
Object parse = JSONUtils.parse(csc);
LinkedHashMap<String, String> zds = (LinkedHashMap)parse;

debug
csc:“{"接线方式":"wiring_mode","台区名称":"tg_name","运维单位":"org_no","台区编号":"tg_no","台区容量":"tg_cap","问题描述":"wtms_wiring_mode","变更时间":"chg_date","安装地址":"inst_addr"}”

到上面的第三行就开始报错:
图片说明
图片说明
图片说明

这是什么情况

2个回答

把这个响应的 JSON 字符串用在线 JSON 校验一下看看是否是标准的 JSON 。

qq_27794563
码屌丝 谢谢了,已经解决了,trim下ok了
7 个月之前 回复

import java.util.LinkedHashMap;

import com.alibaba.fastjson.JSONObject;

public class TestString {

public static void main(String[] args) {
    String csc = "{'接线方式':'wiring_mode','台区名称':'tg_name','运维单位':'org_no','台区编号':'tg_no','台区容量':'tg_cap','问题描述':'wtms_wiring_mode','变更时间':'chg_date','安装地址':'inst_addr'}";
    System.out.println(csc);
    LinkedHashMap<String, String> parse = JSONObject.parseObject(csc, LinkedHashMap.class);
}

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
线程blocked问题 以下是jstack后 一个线程的状态,请大神帮分析下
"http-bio-8080-exec-192" daemon prio=10 tid=0x00007f8468047000 nid=0x4c47 waiting for monitor entry [0x00007f84f8cca000] java.lang.Thread.State: BLOCKED (on object monitor) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:274) at com.sun.beans.finder.ClassFinder.findClass(ClassFinder.java:67) at com.sun.beans.finder.ClassFinder.findClass(ClassFinder.java:110) at java.beans.Introspector.findCustomizerClass(Introspector.java:1245) at java.beans.Introspector.getTargetBeanDescriptor(Introspector.java:1239) at java.beans.Introspector.getBeanInfo(Introspector.java:415) at java.beans.Introspector.getBeanInfo(Introspector.java:252) at java.beans.Introspector.getBeanInfo(Introspector.java:214) at com.java.manage.util.JsonUtils.bean2json(JsonUtils.java:76) at com.java.manage.util.JsonUtils.object2json(JsonUtils.java:55) at com.java.manage.util.JsonUtils.list2json(JsonUtils.java:133) at com.java.manage.util.JsonUtils.object2json(JsonUtils.java:49) at com.java.manage.util.JsonUtils.bean2json(JsonUtils.java:84) at com.java.manage.webservice.GroupMemberManager.getContactsList(GroupMemberManager.java:409) at com.java.manage.webservice.GetEnterMouthWebService.get(GetEnterMouthWebService.java:111) at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
安卓联网解析长JSON字符串
接口地址:http://api.k780.com:88/?app=weather.city&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json 代码: package com.example.cityinfo; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class JsonUtils { //cityjson是从网络获取的json字符串 public ArrayList<City> getlist(String cityjson) { Log.i("==========", "getlist方法"); try { ArrayList<City> list = new ArrayList<City>(); JSONObject object = new JSONObject(cityjson); JSONArray array = object.getJSONArray("result"); for(int i=0;i<array.length();i++) { JSONObject wea = array.getJSONObject(i); String name =wea.getString("citynm"); String key = wea.getString("weaid"); list.add(new City(name,key)); Log.i("========", name); } return list; } catch (JSONException e) { } return null; } } 获取json字符串代码 package com.example.cityinfo; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.util.Log; public class HttpUtils { public String getJson(String cityURL) { try { Log.i("======", "正在连接。。。"); HttpURLConnection conn=(HttpURLConnection)new URL(cityURL).openConnection(); conn.setRequestMethod("GET"); conn.connect(); if(conn.getResponseCode() == 200) { Log.i("=====", "连接成功。。。"); InputStream is = conn.getInputStream(); byte[] b = new byte[1024]; int num=0; StringBuffer buffer = new StringBuffer(); while ((num=is.read(b))!=-1) { buffer.append(new String(b,0,num)); } return buffer.toString(); } } catch (MalformedURLException e) { } catch (IOException e) { } return null; } } 为什么解析不了,还有每次获取的json字符串长度都不一样。 解析里的try里面的代码不能用运行![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)
JSONObject的fromObject抛出异常,在那个地方捕捉
``` public static JSONObject fromObject(Object object, JsonConfig jsonConfig) { if(object == null || JSONUtils.isNull(object)) return new JSONObject(true); if(object instanceof Enum) throw new JSONException("'object' is an Enum. Use JSONArray instead"); if((object instanceof Annotation) || object != null && object.getClass().isAnnotation()) throw new JSONException("'object' is an Annotation."); if(object instanceof JSONObject) return _fromJSONObject((JSONObject)object, jsonConfig); if(object instanceof DynaBean) return _fromDynaBean((DynaBean)object, jsonConfig); if(object instanceof JSONTokener) return _fromJSONTokener((JSONTokener)object, jsonConfig); if(object instanceof JSONString) return _fromJSONString((JSONString)object, jsonConfig); if(object instanceof Map) return _fromMap((Map)object, jsonConfig); if(object instanceof String) return _fromString((String)object, jsonConfig); if(JSONUtils.isNumber(object) || JSONUtils.isBoolean(object) || JSONUtils.isString(object)) return new JSONObject(); if(JSONUtils.isArray(object)) throw new JSONException("'object' is an array. Use JSONArray instead"); else return _fromBean(object, jsonConfig); } ``` 很好奇,问什么JSONObject的fromObject抛出异常,没有捕捉?
远程连接redis连接池总是报错
springboot连接redis 项目启动 服务器上redis是开着的 也能连上 redis.conf中绑定本地id也删除了 就是用这个连接池的时候报错 控制台报如下错误: ``` org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:204) at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:348) at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:129) at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:92) at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:79) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:194) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:169) at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:91) at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:169) at com.how2java.test.TestRedisOne.testRedisOne(TestRedisOne.java:82) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:53) at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226) at redis.clients.jedis.JedisPool.getResource(JedisPool.java:16) at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:194) ... 38 more Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out at redis.clients.jedis.Connection.connect(Connection.java:207) at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767) at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106) at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:888) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:432) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361) at redis.clients.util.Pool.getResource(Pool.java:49) ... 41 more Caused by: java.net.SocketTimeoutException: connect timed out at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at redis.clients.jedis.Connection.connect(Connection.java:184) ... 48 more ``` ``` package com.how2java.springboot.web; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.how2java.redis.RedisClient; import com.how2java.springboot.pojo.JsonData; import com.how2java.springboot.pojo.UserPojo; import com.how2java.utils.JsonUtils; @RestController @RequestMapping("/api/v1/redis") public class RedisTestController { //得到redis封装类 @Autowired private RedisClient redis; //添加字符串 @GetMapping(value="add") public Object add(){ redis.set("username", "xddddddd"); return JsonData.buildSuccess(); } //通过key值得到value字符串 @GetMapping(value="get") public Object get(){ String value = redis.get("username"); return JsonData.buildSuccess(value); } //将对象通过工具类转成String类型,存入redis中 @GetMapping(value="save_user") public Object saveUser(){ UserPojo user = new UserPojo(1, "abc", "11", new Date()); String userStr = JsonUtils.obj2String(user); boolean flag = redis.set("base:user:11", userStr); return JsonData.buildSuccess(flag); } //通过key值得到value值,让后将value转为对象 @GetMapping(value="find_user") public Object findUser(){ String userStr = redis.get("base:user:11"); UserPojo user = JsonUtils.string2Obj(userStr, UserPojo.class); return JsonData.buildSuccess(user); } } ``` application.propertites ``` ##REDIS (RedisProperties) spring.redis.host=39.105.35.139 spring.redis.port=6397 spring.redis.pool.max-idle=200 spring.redis.pool.min-idle=200 spring.redis.pool.max-active=2000 spring.redis.pool.max-wait=1000 spring.redis.timeout=3000 spring.redis.database=0 spring.redis.password= ``` ``` package com.how2java.redis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; /** * 功能描述:redis工具类 * 对于redisTpl.opsForValue().set(key, value)进行了一次封装,不然每次都要这样保存值 * 而封装后只需:new RedisClient().set(key,value); */ @Component public class RedisClient { @Autowired private StringRedisTemplate redisTpl; //jdbcTemplate // 功能描述:设置key-value到redis中 public boolean set(String key ,String value){ try{ redisTpl.opsForValue().set(key, value); return true; }catch(Exception e){ e.printStackTrace(); return false; } } // 功能描述:通过key获取缓存里面的值 public String get(String key){ return redisTpl.opsForValue().get(key); } } ``` ``` package com.how2java.utils; import java.io.IOException; import org.springframework.util.StringUtils; import com.fasterxml.jackson.databind.ObjectMapper; /** * 字符串转对象,对象转字符串的工具类 * 因为StringRedisTemplate的opsForValue()方法需要key,value都需要String类型,所以当value值存入对象的时候 * 先转成字符串后存入。 */ public class JsonUtils { private static ObjectMapper objectMapper = new ObjectMapper(); //对象转字符串 public static <T> String obj2String(T obj){ if (obj == null){ return null; } try { return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj); } catch (Exception e) { e.printStackTrace(); return null; } } //字符串转对象 public static <T> T string2Obj(String str,Class<T> clazz){ if (StringUtils.isEmpty(str) || clazz == null){ return null; } try { return clazz.equals(String.class)? (T) str :objectMapper.readValue(str,clazz); } catch (IOException e) { e.printStackTrace(); return null; } } } ``` ``` package com.how2java.springboot.pojo; import java.io.Serializable; /** * 这是后端向前端响应的一个包装类 * 一般后端向前端传值会有三个属性 * 1:响应状态 * 2:如果响应成功,把数据放入 * 3: 描述,响应成功描述,或者失败的描述 */ public class JsonData implements Serializable { private static final long serialVersionUID = 1L; private Integer code; // 状态码 0 表示成功,1表示处理中,-1表示失败 private Object data; // 数据 private String msg;// 描述 public JsonData() { } public JsonData(Integer code, Object data, String msg) { this.code = code; this.data = data; this.msg = msg; } // 成功,只返回成功状态码 public static JsonData buildSuccess() { return new JsonData(0, null, null); } // 成功,传入状态码和数据 public static JsonData buildSuccess(Object data) { return new JsonData(0, data, null); } // 失败,传入描述信息 public static JsonData buildError(String msg) { return new JsonData(-1, null, msg); } // 失败,传入描述信息,状态码 public static JsonData buildError(String msg, Integer code) { return new JsonData(code, null, msg); } // 成功,传入数据,及描述信息 public static JsonData buildSuccess(Object data, String msg) { return new JsonData(0, data, msg); } // 成功,传入数据,及状态码 public static JsonData buildSuccess(Object data, int code) { return new JsonData(code, data, null); } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public static long getSerialversionuid() { return serialVersionUID; } @Override public String toString() { return "JsonData [code=" + code + ", data=" + data + ", msg=" + msg + "]"; } //提供get和set方法,和toString方法 } ``` ``` package com.how2java.springboot.pojo; import java.util.Date; public class UserPojo { private int age; private String pwd; private String phone; private Date createTime; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public UserPojo() { super(); } public UserPojo(int age, String pwd, String phone, Date date) { super(); this.age = age; this.pwd = pwd; this.phone = phone; this.createTime = date; } } ```
json解析数字为什么会是null?
_json部分数据如下(json数据在bejson网上校验过正确):_ {"Pid":"kesou2.jpg","Title":"小儿咳嗽怎么办?","Url":"/Baby/pic/kesou_","Count":7} javabean如下: _public class ListItem implements Serializable{_ private String Pid; private String Title; private String Url; private Integer Count; //set,get,构造函数略 } 解析json部分代码如下: JSONArray jsonArray = JsonUtils.getJsonArry("listitem.json", context); for (int i = 0; i < jsonArray.length(); i++) { JSONObject object = jsonArray.getJSONObject(i); String pid = object.getString("Pid"); String title = object.getString("Title"); String Url = object.getString("Url"); Integer Count = object.getInt("Count"); ListItem item = new ListItem(pid, title, Url, Count); mData.add(item); 解析完后log输出如下: _Log.i("haha", mData.get(0).getCount()+","+mData.get(0).getTitle()); _ 结果: _03-18 16:17:23.445: I/haha(7960): null,小儿咳嗽怎么办? 请问各位我到底是在哪个地方出错了呢?为什么会解出null值呢?上面的json里明明count写的是7啊!!!!!
Java 中redis存值后,取不到值 ,可以存到redis,但是取出key的值为null
Java 中redis存值后,取不到值 ,可以存到redis,但是取出key的值为null ``` @Autowired private JedisClient jedisClient; //保存缓存到redis redis中有数据 jedisClient.hset("INDEX_CONTENT", cid+"", JsonUtils.objectToJson(list)); //查询缓存 json一直取出的为Null String json = jedisClient.hget(INDEX_CONTENT, cid+""); ``` redis的xml配置文件 ``` <!-- redis单机版 --> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="192.168.87.128"/> <constructor-arg name="port" value="6379"/> </bean> <!-- 将实现类注入spring容器 --> <bean id="jedisClientPool" class="com.taotao.jedis.JedisClientPool"/> ``` 请问这个问题是出在扫描地方呢
微信小程序开发,mvc能接受到请求,但是接受不到其他的属性?
前端代码 ``` wx.uploadFile({ url: app.globalData.url + "wxUploadImage.do",//请求地址 filePath: tempFilePaths[0], name: 'file', header: { "Content-Type": "multipart/form-data", 'accept': 'application/json' }, formData: { 'userId': app.globalData.user_login.data.workcode }, success: function (res) { var data = res.data; data = JSON.parse(data); console.log(data.data); that.setData({ isUploadFinish: true, imgUrl: tempFilePaths[0], uploadImgUrl:data.data }); //do something } }); ``` java代码 ``` @ResponseBody @RequestMapping("/wxUploadImage") public String upload(HttpServletRequest request, @RequestParam(value="file", required=false) MultipartFile file) { Map<String, Object> dataMap = new HashMap<String, Object>(); try { System.out.println("执行upload"); request.setCharacterEncoding("UTF-8"); String userId = request.getParameter("userId"); System.out.println("userId="+userId); if(!file.isEmpty()) { String fileName = file.getOriginalFilename(); String path = null; String type = null; type = fileName.indexOf(".") != -1 ? fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()) : null; System.out.println(type); if (type != null) { if ("GIF".equals(type.toUpperCase())||"PNG".equals(type.toUpperCase())||"JPG".equals(type.toUpperCase())) { // 项目在容器中实际发布运行的根路径 String realPath = request.getSession().getServletContext().getRealPath("/"); // 自定义的文件名称 String trueFileName = String.valueOf(System.currentTimeMillis()) +"--"+userId+"."+ type; // 设置存放图片文件的路径 path = "/upload/signFault/" + trueFileName; System.out.println("realPath==="+realPath); file.transferTo(new File(realPath + path)); dataMap.put(DATA, path); dataMap.put(RESPONSE, SUCCESS); return JsonUtils.toJson(dataMap); }else { dataMap.put(RESPONSE, FAILURE); dataMap.put(MSG, "请求异常"); return JsonUtils.toJson(dataMap); } }else { dataMap.put(RESPONSE, FAILURE); dataMap.put(MSG, "请求异常"); return JsonUtils.toJson(dataMap); } }else { dataMap.put(RESPONSE, FAILURE); dataMap.put(MSG, "请求异常"); return JsonUtils.toJson(dataMap); } } catch (Exception e) { e.printStackTrace(); dataMap.put(RESPONSE, FAILURE); dataMap.put(MSG, "请求异常"); return JsonUtils.toJson(dataMap); } } ``` 后台接受不到那个userid,只显示执行了update 最主要的是测试服能用,正式服就拉稀了
Long类型的变量后面加双引号是什么意思?
参数列表中第二个参数:client.hset(CONTENT_KEY, categoryId+"", JsonUtils.objectToJson(list));
jquery ajax 请求一直返回当前页面HTML代码
前端JS var names =$("#names").val(); if(isNull(names)){ alertMsg({'msg':'请输入姓名!'}); return; } var job_number =$("#job_number").val(); if(isNull(job_number)){ alertMsg({'msg':'请输入工号!'}); return; } var email =$("#email").val(); if(isNull(email)){ alertMsg({'msg':'请输入邮箱'}); return; } $.ajax({ type:"post", url:"memberBinding.do", data:{'names':names,'job_number':job_number,'email':email}, dataType:"json", success:function(result){ alert(result); alert(result.error); alert(result.msg); return; }, error:function(XMLHttpRequest, textStatus, errorThrown){ alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); alert("Ajax获取数据失败!"); } }); 后端处理代码: public String memberBinding() throws Exception { JSONObject json = new JSONObject(); json.put("error", "1"); json.put("msg", "验证成功"); JSONUtils.printObject(json); return null; } 问题描述: 执行这个请求实际是没有发送到服务端去,可是却进入了 success,并且result 返回的数据是当前这个页面的所有HTML元素。改变dataType 为HTML 还是没有用,但是会进入error,status=200,readyState=4,textStatus=parsererror。 这个请求都没有发送到服务端,我已经在服务端跟踪了,没有响应请求。另外服务端返回的结果是JSON字符串格式的数组。服务器端直接用地址栏的形式是可以返回数据的,并且没有任何异常,返回内容{"error":"1","msg":"验证成功"}
用json时的一个问题,
假设有一个Person类, [code="java"] public class Person{ private java.util.Date birthday; // settor and gettor methods..... } [/code] 现在客户端那边传来如下的json规则的字符串String personJson = "{birthday:\"06/28/2008 17:00:00\"}",要用 JSONOjbect.toBean(JSONObject.from(personJson ),Person.class)方法来获得相应的Person实例时就出问题了,报错如下: [code="java"] 2008-6-19 13:57:39 net.sf.json.JSONObject morphPropertyValue 警告: Can't transform property 'birthday' from java.lang.String into java.util.Date. Will register a default Morpher 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 信息: Property 'java.util.Date.class' has no write method. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.date' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 信息: Property 'java.util.Date.day' has no write method. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.hours' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.minutes' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.month' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.seconds' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.time' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 信息: Property 'java.util.Date.timezoneOffset' has no write method. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.year' does not exist. SKIPPED. Person's brithday: Thu Jun 19 13:57:39 CST 2008 [/code] 这个怎么解决? 以下是我做实验用的Java代码: ======================= [code="java"] package json; import java.util.Date; import net.sf.json.JSONObject; public class Person { private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public static Person getInstance(String jsonVale) { return (Person)JSONObject.toBean(JSONObject.fromObject(jsonVale),Person.class); } public static void main(String[] args) { String personJson = "{birthday:\"06/28/2008 17:00:00\"}"; Person p = getInstance(personJson); System.out.println("Person's brithday: "+ p.getBirthday()); } } [/code] [b]问题补充:[/b] To ham: 你所说的那个方案是针对 bean --> Json的,而现在的问题是从Json到Bean. [b]问题补充:[/b] 多谢各位的帮忙,现在这个问题解决了,也就是在toBean前加一句话:JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"MM/dd/yyyy HH:mm:ss"}) );来配置记下Date转化时的Morpher就OK了,大家有兴趣的话可以试下. Thanks a lot!
spring mvc注入controller失败找不到原因
运行不报错,根目录下的文件可以访问。但是访问不了Controller,打断点运行也进不去, 访问http://localhost:8081/rest/itemcat/list就404找不到页面,求大神解救。 这是springMVC配置文件 ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.taotao.rest.controller" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans> ``` 这是Controller层 ``` package com.taotao.rest.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJacksonValue; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.taotao.common.utils.JsonUtils; import com.taotao.rest.pojo.CatResult; import com.taotao.rest.service.ItemCatService; /** * 商品分类列表 * <p>Title: ItemCatController</p> * <p>Description: </p> * <p>Company: www.itcast.com</p> */ @Controller public class ItemCatController { @Autowired private ItemCatService itemCatService; /*@RequestMapping(value="/itemcat/list", produces=MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8") @ResponseBody public String getItemCatList(String callback) { CatResult catResult = itemCatService.getItemCatList(); //把pojo转换成字符串 String json = JsonUtils.objectToJson(catResult); //拼装返回值 String result = callback + "(" + json + ");"; return result; }*/ @RequestMapping("/itemcat/list") @ResponseBody public Object getItemCatList(String callback) { CatResult catResult = itemCatService.getItemCatList(); MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult); mappingJacksonValue.setJsonpFunction(callback); return mappingJacksonValue; } } ``` 这是web.xml ``` <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="taotao" version="2.5"> <display-name>taotao-portal</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 加载spring容器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 解决post乱码 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- springmvc的前端控制器 --> <servlet> <servlet-name>taotao-portal</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>taotao-portal</servlet-name> <!-- 伪静态化 --> <url-pattern>*.html</url-pattern> </servlet-mapping> </web-app> ```
java服务端响应不了post请求
package net.shopxx.aa; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.shopxx.util.JsonUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @Controller("androidController") @RequestMapping("/user") public class LoginControl { @RequestMapping(value="/signin", method = RequestMethod.POST) public @ResponseBody String login(String name,String password) { System.out.print("....\n"); String j="hello"; return JsonUtils.toJson(j); } 上边是代码,没有具体功能的,我只需要Android端能连接上去服务端就可以了
http post 请求 spring mvc 接收参数为NULL 求大神帮助啊
public static JSONObject requestCdi(String url, Map<String, String> params) { log.info("url: {}", url); log.debug("params: {}", params); HttpRequest httpRequest = new HttpRequest(url); httpRequest.setRequestCharset(Configure.get("cdiRequestUrl", "requestCharset")); if (params != null && !params.isEmpty()) { httpRequest.setParams(params); } String result = httpRequest.doPost(); log.debug("response result: {}", result); JSONObject data = JSONObject.fromObject(result); if (!data.getBoolean("success")) { log.error("request cdi error, url: {}, result: {}", url, data); } return data; } public String doPost() { String responseString = null; CloseableHttpClient httpclient = null; try { httpclient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(this.url); RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(95 * 1000) .setConnectTimeout(100 * 1000).build(); httpPost.setConfig(requestConfig); httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=" + this.requestCharset); //httpPost.setHeader("Content-Type", "application/json; charset=" + this.requestCharset); //httpPost.setHeader("Accept", "application/json"); if (this.params != null && !this.params.isEmpty()) { List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); Entry<String, String> entry = null; for (Iterator<Entry<String, String>> iter = this.params.entrySet().iterator(); iter.hasNext();) { entry = iter.next(); log.info("key is {} ",entry.getKey()); nameValuePairList.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); //entry.getValue() } log.info("nameValuePairList : {} ",nameValuePairList.toString()); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, this.requestCharset)); log.info("httpPost.getEntity() : {} ",httpPost.getEntity().toString()); } HttpResponse httpResponse = httpclient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { if (this.responseCharset == null || "".equals(this.responseCharset)) { this.responseCharset = getCharset(httpResponse); } if (isGzip(httpResponse)) { responseString = EntityUtils.toString(new GzipDecompressingEntity(httpResponse.getEntity()), this.responseCharset); } else { responseString = EntityUtils.toString(httpResponse.getEntity(), this.responseCharset); } } } catch (Exception e) { //log.error("Http post request error: {}", e.getMessage()); e.printStackTrace(); } finally { try { if (httpclient != null) { httpclient.close(); } } catch (IOException e) { log.error(e.toString()); } } return responseString; } 下面是spring mvc 接收 代码 @RequestMapping(value = { "/infoDayHits/{proSymbol:[A-Za-z]+}" }, method = {RequestMethod.GET,RequestMethod.POST}) @ResponseBody public String addInfoDayHit(@PathVariable String proSymbol,String data) { try { log.info("add {} InfoDayHit start...", proSymbol); log.info("data: {}", data); //InfoDayHit infoDayHit = new InfoDayHit(); //ModelData modelData = JsonUtils.toObject(data, ModelData.class); ModelData modelData = JsonUtils.toObject(data, ModelData.class); // key: synchDate -- 2017-11-07 year:2017 mmdd: "1107" // key: infoDayHitsData // infoDayHitsList JsonUtils.toObject(infoDayHitsData, ModelData[].class) // for each infoDayHitsList ModelData --key infoId; key dayHits String year = modelData.get("synchDate").toString().substring(0,4); String mmDD = modelData.get("synchDate").toString().substring(5).replace("-", ""); log.info("year: {}", year); log.info("mmDD: {}", mmDD); //modelData.get("infoDayHitsData") @SuppressWarnings("rawtypes") List hitData = (List) modelData.get("infoDayHitsData"); infoDayHitService.addInfoDayHit(hitData, proSymbol, year, mmDD); log.info("add InfoDayHit end..."); //return R.success(); }catch (Exception e) { log.error(e.toString()); } return R.success(); } 接收到的 data 打印 为null,但是在别的服务器上 测试 是可以 接收到 参数的
使用json-lib的JSONObject.toBean( )时碰到的日期属性转换的问题
今天碰到这样一个问题: <br />当前台以JSON格式向后台传递数据的时候,对于数据中的日期属性,无法正常转换为相应的Date属性。 <br />JSON数据是这样的: <br />{"birthday":"1980/01/01","name":"testname"} <br /> <br />我要转换成的类是这样的: <br /><pre name="code" class="java">public class Person { private String name; private Date birthday; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Date getBirthday() { return birthday; } } </pre> <br /> <br />转换的代码是这样的: <br /><pre name="code" class="java">JSONObject jsonPerson = JSONObject.fromObject(personData); //personaData是json串 Person person = (Person)JSONObject.toBean(jsonPerson, Person.class); </pre> <br /> <br />转换时并不抛出例外,而是在日志中打出以下警告信息: <br />Can't transform property 'birthday' from java.lang.String into java.util.Date. Will register a default Morpher <br /> <br />在网上搜了一遍,发现了很多关于进行相反方向转换时的帖子,即使用json-lib将bean转成json串时,日期属性的格式不符合习惯,后来好不容易才找到了这个问题的解决办法,虽然是抄别人的,但也发一贴为以后其他人更容易找到答案出点力,呵呵。废话少说,其实解决方法很简单,把转换代码改成这样: <br /><pre name="code" class="java">JSONObject jsonPerson = JSONObject.fromObject(personData); String[] dateFormats = new String[] {"yyyy/MM/dd"}; JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats)); Person person = (Person)JSONObject.toBean(jsonPerson, Person.class); </pre> <br /> <br />想深究原因的人可以参看json-lib和ezmorpher的相关文档。<br /><strong>问题补充:</strong><br />哈 <br />本来是发帖子的,怎么被系统自动转到问答栏目来了,估计是题目没起好,叫了个“。。。问题”,见笑了。
java管理系统用户登录退出问题
一共有三个用户,管理员 教师 学生,按顺序登录退出没有任何问题,但是登录管理员并退出之后,登录教师再退出,这个时候如果还想登录管理员就不行,结果还是教师页面。然后按顺序登录退出管理员、教师、学生,再想登录教师或管理员都不行,全是学生界面,学生可以切换登录。。。不知道怎么搞得, 简化下问题就是: 登录退出再登录顺序: 管理员->教师->学生   OK                                       管理员->教师->管理员   NO                                       教师->学生->教师        NO 。。。。。。。。。。。。。。。。。。。。。。。 涉及的所有后端代码如下 /**  * 用户登陆  * @return  */     public void index() throws IOException {        User user1 = userService.getUser(user);         if (user1 != null){             if (user1.getIsSh() == 1){                 if (user1.getRole().getEnName().equals("admin")){                     ActionContext.getContext().getSession().put("user", user1);                 }                 if (user1.getRole().getEnName().equals("teacher")){                     ActionContext.getContext().getSession().put("user1", user1);                 }                 if (user1.getRole().getEnName().equals("student")){                     ActionContext.getContext().getSession().put("user2", user1);                 }                 map.put("flag", 1);                 map.put("url", "login_indexs.do");                 map.put("id", user1.getId());                 JsonUtils.toJson(map);             } else {                 map.put("flag", 2);                 JsonUtils.toJson(map);             }         } else {             map.put("flag", 3);             JsonUtils.toJson(map);         }     } //登陆页面     public String login() {         return SUCCESS;     }    //退出     public String logout() {         ActionContext ac = ActionContext.getContext();         Map session = ac.getSession();         session.remove("userName");         session.remove("userId");         return "login";     }
关于Spring中事务的先关问题~~~苦等各位高手大拿~~~这里先谢谢啦~~有代码哦!
``` @Override @Transactional public JSONObject openToAccount(JSONObject params)throws Exception { JSONObject json = new JSONObject(); // 先判断是否存在用户账户记录 if(userAccountDao.isExistUserAmountRec(params.getString("userId")) <= 0){ // 不存在 // 初始化用户账户记录 int initcount = userAccountDao.initUserAccount(params.getString("userId")); if(initcount <= 0){ throw new BusinessException("初始化用户账户记录异常"); } }else{ //存在 // 获取用户账号对象 UserAccounct userAccounct = userAccountDao.getUserAmountByUserId(params.getString("userId")); // 是否存在 if(userAccounct != null){ logger.info(" userAccount Record is Exist ! "); // 个人收益是否大于0 if(userAccounct.getPlatformRevenue().compareTo(BigDecimal.ZERO) == 1){ try { logger.info(" userAccount record incomeAmount is ¥ " + userAccounct.getPlatformRevenue()); // 先修改本地记录 将用户收益归零 int updateUserAccountCount = userAccountDao.setPlatformRevenueByUserId(params.getString("userId"), BigDecimal.ZERO); if(updateUserAccountCount <= 0){ throw new BusinessException("重置该用户收益金额异常"); } logger.info(" userAccount record incomeAmount updated to Zero "); // 将所有属于该用户的订单更新为已折现 int updatePaymentCount = paymentDao.updateIsDiscountedByUserId(params.getString("userId")); if(updatePaymentCount <= 0){ throw new BusinessException("用户订单信息折现状态更新异常"); } logger.info(" payment record isdiscounted updated to 'true' "); // 封装数据 请求openToAccount接口 List<NameValuePair> paramsList = new ArrayList<NameValuePair>(); // 根据终端匹配AppId if(params.getString("terminal") == "ios" || "ios".equals(params.getString("terminal"))){ // iosAppId paramsList.add(new BasicNameValuePair("client_id", iosAppId)); } if(params.getString("terminal") == "android" || "android".equals(params.getString("terminal"))){// andoriApp paramsList.add(new BasicNameValuePair("client_id", androidAppId)); } logger.info(" access_token is "+ params.getString("access_token")); logger.info(" openid "+ params.getString("openId")); logger.info(" amount "+ userAccounct.getPlatformRevenue().toString()); paramsList.add(new BasicNameValuePair("access_token", params.getString("access_token"))); // access_token移动端传递 paramsList.add(new BasicNameValuePair("openid", params.getString("openId"))); // openId移动端传递 paramsList.add(new BasicNameValuePair("amount",userAccounct.getPlatformRevenue().toString())); // 金额 目前为全部折现 String r = HttpsClientUtils.doPost(openToAccountUrl, paramsList); // 调用开放平台openToAccount接口 JSONObject returnJson = JSONObject.parseObject(r); // openToAccount接口返回 JsonObject String code = returnJson.getString("code"); // 返回参数 code String success = returnJson.getString("success"); // 返回参数 success String msg = returnJson.getString("msg"); // 返回参数 msg logger.info(" UTOUU Open platform OpenToAcount return----->code:{}-----msg:{}-----success:{}",code,msg,success); // 根据openToCas接口返回的code码 判断 折现成功 if(code == ConfessionConstants.DISCOUNTED_SUCCESS_CODE || ConfessionConstants.DISCOUNTED_SUCCESS_CODE.equals(code)){ logger.info(" OpenToAcount return code is " + code);// 返回0为成功 // 返回折现成功消息 json = JsonUtils.getSucResultJson(ResultCodeAndMsg.RSP_SUCCESS_CODE, ResultCodeAndMsg.REVENUE_DISCOUNT_SUCCESS_MSG); return json; } // 折现失败 logger.info(" OpenToAcount return code is " + code); json = JsonUtils.getFailResultJson(ResultCodeAndMsg.RSP_FAIL_CODE, ResultCodeAndMsg.RSP_FAIL_MSG); throw new BusinessException("个人收益转出失败!"); } catch (Exception e) { e.printStackTrace(); } }else{ // 返回没有可以折现的收益金额信息 json = JsonUtils.getFailResultJson(ResultCodeAndMsg.RSP_SUCCESS_CODE, ResultCodeAndMsg.REVENUE_IS_ZREO); return json; } }else{ throw new BusinessException("未找到该用户账户记录异常"); } } json = JsonUtils.getFailResultJson(ResultCodeAndMsg.RSP_FAIL_CODE, ResultCodeAndMsg.RSP_FAIL_MSG); return json; } ``` 这个是我的一个业务实现类、大致用途是关于金额转出的、其中在代码中还请求了第三方服务的接口 现在我的问题主要有两个: 1:为什么我根据第三方服务返回的结果判断后(当然是我不想得到的结果时)throw 异常 后该service层调用的所有DAO不回滚? 2:如何防止并发呢?我这里是可以多点登录的、即同一个用户在不同的设备上同时执行了该业务类,这时候我就傻了~~~请问该如何处理? 谢谢大家了
spring aop afterthrowing 和around到底有什么不同
这是我之前做的日志代码用的是before和afterthrowing代码如下 package com.crm.admin.controller.advice; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Component; import com.crm.admin.shiro.util.ShiroUserUtils; import com.crm.bussiness.biz.log.ToUserLogsBiz; import com.crm.bussiness.dao.entity.SysUser; import com.crm.bussiness.dao.entity.log.ToUserLogs; import com.crm.util.JsonUtils; @Component @Aspect public class LogInterceptor { @Autowired ToUserLogsBiz toUserLogsBiz; ToUserLogs tul; @Pointcut("@annotation(com.crm.admin.controller.advice.Operate)") public void invokePoint(){ } @Before("invokePoint()") public void beforeMethod(JoinPoint jp){ tul=new ToUserLogs(); SysUser user = ShiroUserUtils.getCurrentShiroUser().getSysUser(); String host = ShiroUserUtils.getSubject().getSession().getHost(); Operate operate = getOperate(jp); tul.setOperatorInfo(operate.operatingContent()); tul.setOperatorTime(new Date()); tul.setRoleName(user.getRealName()); tul.setUserId(user.getId()); tul.setIp(host); tul.setState(1); Object[] objs = jp.getArgs(); List<String> params = new ArrayList<>(); for (Object object : objs) { if (!(object instanceof HttpServletRequest) && !(object instanceof HttpServletResponse)) { params.add(JsonUtils.beanToJson(object)); } } toUserLogsBiz.insert(tul); } @AfterThrowing(value="invokePoint()", throwing = "e") public void afterThrow(JoinPoint jp,Exception e){ tul=new ToUserLogs(); tul.setState(0); tul.setExceptionInfo(e.getMessage()); toUserLogsBiz.updateByPrimaryKeySelective(tul); } public Operate getOperate(JoinPoint pjp){ String methodName=pjp.getSignature().getName(); Class<?> classTarget=pjp.getTarget().getClass(); Class<?>[] par=((MethodSignature) pjp.getSignature()).getParameterTypes(); Method objMethod = null; try { objMethod = classTarget.getMethod(methodName, par); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } Operate annotation = objMethod.getAnnotation(Operate.class); return annotation; } } 然后执行到toUserLogsBiz.updateByPrimaryKeySelective(tul);时更新失败是不是此时已经没有connection了 然后没有办法我还了@around代码如下 package com.crm.admin.controller.advice; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.crm.admin.shiro.util.ShiroUserUtils; import com.crm.bussiness.biz.log.ToUserLogsBiz; import com.crm.bussiness.dao.entity.SysUser; import com.crm.bussiness.dao.entity.log.ToUserLogs; import com.crm.util.JsonUtils; @Component @Aspect public class LogInterceptor { @Autowired ToUserLogsBiz toUserLogsBiz; ToUserLogs tul; @Around("@annotation(com.crm.admin.controller.advice.Operate)") public void aroundPoint(ProceedingJoinPoint pjp){ System.out.println("进入环绕"); try { tul=new ToUserLogs(); SysUser user = ShiroUserUtils.getCurrentShiroUser().getSysUser(); String host = ShiroUserUtils.getSubject().getSession().getHost(); Operate operate = getOperate(pjp); tul.setOperatorInfo(operate.operatingContent()); tul.setOperatorTime(new Date()); tul.setRoleName(user.getRealName()); tul.setUserId(user.getId()); tul.setIp(host); tul.setState(1); Object[] objs = pjp.getArgs(); List<String> params = new ArrayList<>(); for (Object object : objs) { if (!(object instanceof HttpServletRequest) && !(object instanceof HttpServletResponse)) { params.add(JsonUtils.beanToJson(object)); } } toUserLogsBiz.insert(tul); pjp.proceed(); } catch (Throwable e) { tul.setState(0); tul.setExceptionInfo(e.getMessage()); toUserLogsBiz.updateByPrimaryKeySelective(tul); e.printStackTrace(); System.out.println(e.getMessage()+"---------------"); } } public Operate getOperate(ProceedingJoinPoint pjp){ String methodName=pjp.getSignature().getName(); Class<?> classTarget=pjp.getTarget().getClass(); Class<?>[] par=((MethodSignature) pjp.getSignature()).getParameterTypes(); Method objMethod = null; try { objMethod = classTarget.getMethod(methodName, par); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } Operate annotation = objMethod.getAnnotation(Operate.class); return annotation; } } 此时可以将异常信息写入 百思不得其解难道@afterthrowing和@around有本质却别吗 还有我第一段代码在controller手动抛出异常时可以正常写入数据库 但是从service抛出的异常就不能正常写入 好奇怪 希望有大神给小弟解答
struts2 接口ContentTypeHandler问题
[code="java"]public class JsonLibHandler implements ContentTypeHandler { @Override public String fromObject(Object obj, String resultCode, Writer stream){ try { JSONObject jsonObject = (JSONObject) JsonUtils.toJson(obj); logger.debug("jsonObject: {}", jsonObject.toString()); stream.write(jsonObject.toString()); } catch (Exception e) { logger.error("发生异常: {}", e); } } }[/code] [size=medium]我想知道obj那个值是从什么地方传过来的?--------怎么没人来解答呢?是问法没对么。。。。[/size]
java支付跳转到支付页面
@Override public void orderSFBPay(HttpServletRequest request, HttpServletResponse response, String username, String money) { username = StringUtils.trim(username); response.setCharacterEncoding("utf-8"); response.setContentType("text/html"); PayInfo payInfo = payInfoDao.findByPayTypeAndPayStatus("sfb", "1"); if(payInfo == null) { throw new ServiceException("充值通道已关闭"); } String total_fee = money.toString().replace(".", ""); DecimalFormat currentNumberFormat=new DecimalFormat("#0.00"); Double moneyDouble = Double.parseDouble(money); moneyDouble*=100;//折算成分 money = currentNumberFormat.format(moneyDouble); BigDecimal bdMoney = new BigDecimal(money); //String tradeNo=transMoneySaveData(username, bdMoney, "扫付宝","扫付宝"); String date = DateTime.now().toString("yyyy-MM-dd HH:mm:ss"); String orderNo=transMoneySaveData(username, bdMoney, "扫付宝","扫付宝"); String title="袜子"; String productCode="100001101"; String clientIp=getIp(request);//"117.30.42.152"; String notifyUrl=payInfo.getNotifyUrl(); String returnUrl=payInfo.getQueryUrl(); try { request.setCharacterEncoding("UTF-8"); long start = System.currentTimeMillis(); Map<String, String> sfb1 = new HashMap<String, String>(); String signSrc=""; sfb1.put("accountId", payInfo.getMerId()); sfb1.put("method", "sfbpay.pay.create"); sfb1.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime())); sfb1.put("reqIp", clientIp); sfb1.put("dataType", "json"); sfb1.put("charset", "utf-8"); sfb1.put("signType", "MD5"); sfb1.put("nonceStr", System.currentTimeMillis()+""); sfb1.put("payUrl", payInfo.getReqUrl()); // sfb1.put("bizContent", ""); Map<String,String> sfb2=new HashMap<String,String>(); sfb2.put("orderNo", orderNo); sfb2.put("clientIp", clientIp); sfb2.put("productCode", productCode); sfb2.put("money", total_fee); sfb2.put("title", title); sfb2.put("notifyUrl", payInfo.getNotifyUrl()); sfb2.put("returnUrl", payInfo.getQueryUrl()); // sfb1.put("bizContent", JsonUtils.objectToJson(sfb2)); //JsonUtil.serialize(sfb2)); // // Set<String> keys=sfb1.keySet(); // List<String> list=new ArrayList<String>(keys); // Collections.sort(list); // for(String str:list) { // signSrc+=str+"="+sfb1.get(str)+"&"; // } // String postData=signSrc+"key="+payInfo.getPrivateKey(); // String sign=MD5.MD5Encode(postData).toUpperCase(); // sfb1.put("sign", sign); // sfb1.put("bizContent", GsonUtil.toJson(sfb2)); sfb1.put("sign", com.xl.lottery.pay.saofubao.Util.generateSignature(sfb1, payInfo.getPrivateKey())); sfb1.put("bizContent", URLEncoder.encode(sfb1.get("bizContent"), "utf-8")); //String resultMsg = com.xl.lottery.pay.xef.util.PostUtil.post(payInfo.getReqUrl(),sfb1); String responseContent = com.xl.lottery.pay.saofubao.Util.doPostRequest(payInfo.getReqUrl(), sfb1); System.out.println("<br/><br/>请求地址:" + payInfo.getReqUrl()); System.out.println("<br/><br/>请求结果:" + responseContent); System.out.println("请求结果:" + responseContent); Map respMap = JSON.parseObject(responseContent, Map.class); String code=(String) respMap.get("code"); // String url=payInfo.getReqUrl(); String result=(String) respMap.get("result"); if(code.equals("200")) { } else { System.out.println("<br/><br/>验签结果:失败"); } long end = System.currentTimeMillis(); System.out.println("==========HttpClientUtil2====>>>>>>>>>>"+(end - start)); }catch (Exception e) { e.printStackTrace(); } } code成功了,我该用什么代码才能跳转到我想要跳转的页面,
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片...
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c# id读写器 c#俄罗斯方块源码 c# linq原理 c# 装箱有什么用 c#集合 复制 c# 一个字符串分组 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图
立即提问