2016年工作中遇到的问题31-40

31.Spring和Dubbo中都有@Service注解,需要注意。
import com.alibaba.dubbo.config.annotation.Service;


import org.springframework.stereotype.Service;


32. Eclipse地方的注释换行了。
/**
* 校验令牌信息是否有效
*
* @param token
*            令牌信息
* @return 是否有效
*/
public boolean checkToken(String token) throws MemberSecurityException;

项目中需要改为:
/**
* 校验令牌信息是否有效
*
* @param token 令牌信息
* @return 是否有效
*/
public boolean checkToken(String token) throws MemberSecurityException;


修改模版,
Preference-Java-Code Style-Formatter-Edit-Comments-"New line after @Param tag"。


把自己的Formatter.xml文件导出,再导入,Ctrl+Shift+F,格式化就可以了。

33.SpringMVC,Fastjson,$ref.


最后的json存在$ref,前端js不好处理。(前端应该存在对应的js组件,可以解析这种$ref引用)
public static void main(String[] args) {
Member member = new Member();
member.setId(1L);


List<Member> memberList = new ArrayList<Member>();
memberList.add(member);
memberList.add(member);
System.out.println(JSON.toJSONString(memberList));
}
[{"id":1},{"$ref":"$[0]"}]




解决办法1:
public static void main(String[] args) {
Member member = new Member();
member.setId(1L);


List<Member> memberList = new ArrayList<Member>();
memberList.add(member);
memberList.add(member);
System.out.println(JSON.toJSONString(memberList,SerializerFeature.DisableCircularReferenceDetect));
}
输出:[{"id":1},{"id":1}]


解决办法2:
<bean id="jsonConverter"
    class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
    <property name="supportedMediaTypes" value="application/json;charset=UTF-8"/>
    <property name="features">
      <array value-type="com.alibaba.fastjson.serializer.SerializerFeature">
        <value>DisableCircularReferenceDetect</value>
      </array>
    </property>
  </bean>
  <bean id="DisableCircularReferenceDetect" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
    <property name="staticField" value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect"></property>
  </bean>
  
34.抛出异常,打印对应的“中文提示”。
super(codeEnum.getRemark());//这句话很关键,有了它,抛出异常的时候,可以直接看到“错误提示”


public enum MemberSecurityCodeEnum {
INVALID_ACCESS_TOKEN(13000,"不合法的AccessToken"),
ACCESS_TOKEN_EXPIRED(13001,"AccessToken已过期"),
}

public class MemberSecurityException extends Exception {


private Integer code;
private String msg;


public MemberSecurityException() {
super();
}


public MemberSecurityException(MemberSecurityCodeEnum codeEnum) {
super(codeEnum.getRemark());//这句话很关键,有了它,抛出异常的时候,可以直接看到“错误提示”
this.code = codeEnum.getCode();
this.msg = codeEnum.getRemark();
}
}


Exception in thread "main" exception.MemberSecurityException


#这种提示更直观
Exception in thread "main" exception.MemberSecurityException: AccessToken已过期


public static void main(String[] args) throws MemberSecurityException {
throw new MemberSecurityException(MemberSecurityCodeEnum.ACCESS_TOKEN_EXPIRED);
}

35.修改表字段的sql语句。
alter table order_item
change column productJson specJson text;


36.SpringMVC属性读取和容器,父子关系。
 友情提示:父子关系理论应该是正确的,但不同配置文件之间的“父子关系”有待考验。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring-context.xml
</param-value>
</context-param>


这个是“顶级容器”,spring-mvc-servlet.xml是子容器。
猜测:web.xml先读取的是context上下文文件,另外MVC映射也是“可选的”。重要性方面,context更重要!


另外一种场景,
spring-context.xml
<import resource="classpath:spring-bean-service.xml" />
<import resource="classpath:spring-task.xml" />

疑问:spring-task.xml和spring-bean-service.xml之间的关系是?
    猜测:平级,应该可以读取的到。他们都被导入到spring-context.xml中了。



扫描配置文件
    <util:properties id="domainConfig" location="classpath:goods-domain.properties" />
<context:property-placeholder properties-ref="domainConfig" ignore-unresolvable="true" />


domainName=http://a.com
${domainName},如果注入到Java类中的变量值仍然是"${domainName}",而非“http://a.com”,就说明失败了。

37.Cookie写入失败?Cookie只能用80端口吗?
   Java程序写入Cookie,浏览器再请求时,一只没有把Cookie带过来。
   代码是从之前的项目中copy过来的,质量是很有保障的。
   
   最终比较怀疑是,Cookie只能使用80端口,后来用了80端口,也还是不行。
   
   然后又怀疑是,SpringMVC的ResponseBody有影响。
   之前的代码是,手动调用Response.write发送字符串响应Web前端,然后跳转的。
   //@ResponseBody
@RequestMapping(value = "/doLogin")
public void doLogin(String loginName, String password,
   
   尝试了很多种方案,最后才开始考虑是配置问题,因为代码都是一样的。


   正解:
   p2p.domain=.p2p.jtn.com
#p2p.static=http://p2p.jtn.com:80/static
loginDomain=http://login.p2p.jtn.com:80
frontDomain=http://p2p.jtn.com:80


错解:
frontDomain=http://dev.jtn.com:8080


直接使用带了“http://"前缀的frontDomain


解决办法:
cookieDomain=.dev.jtn.com 
frontDomain=http://dev.jtn.com:8080


cookieDomain用这个名字,看着更加直观,不会再错啦!!!(*^__^*) 


经验:论变量名称的重要性!!!


38.注册的时候,一个人注册了多次。
51 1897132630 3d4f2bf07dc1be38b20cd6e46949a1071f9d0e3d 0 0 2016-06-15 17:14:53 2016-06-15 17:14:53 0
52 1897132630 3d4f2bf07dc1be38b20cd6e46949a1071f9d0e3d 0 0 2016-06-15 17:14:54 2016-06-15 17:14:54 0
数据库的手机号,没有加“唯一约束”。


使用zookeeper锁显然是不合适的,2个不同人,是可以同时注册的。
最简单的办法,只能是数据库添加“唯一约束”了。


39.Dubbo有警告warn。
please config: dubbo.registry.file=xxx.properties。
java.io.IOException: Can not lock the registry cache file C:\Users\Administrator\.dubbo\dubbo-registry-224.5.6.110.cache, ignore and retry later, maybe multi java process use the file, please config: dubbo.registry.file=xxx.properties
at com.alibaba.dubbo.registry.support.AbstractRegistry.doSaveProperties(AbstractRegistry.java:193)
at com.alibaba.dubbo.registry.support.AbstractRegistry$SaveProperties.run(AbstractRegistry.java:150)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

按照提示,配置了dubbo.registry.file=xxx.properties,还是不行。
可能的解决办法:zookepper缓存,清除或者重启就好。


40.JS换行符和在JS中整段地写HTML。
 在2013年或者2014年,之前的问题总结中,遇到过这个问题。
 当时,没有搞成功。
 今天,又遇到了这个问题,成功了。
 
 之前的
 var str = '' +
'<!doctype html>' +
'<html>' +
'   <body>' +
'       <h1>❤ unicorns</h1>' +
'   </body>' +
'</html>' +
'';


现在的
var str = '\
<!doctype html>\
<html>\
   <body>\
       <h1>❤ unicorns</h1> \
   </body> \
</html>';


注意:不能使用Windows的换行符,"\" 必须在最后;


使用网上的某些JS插件,还可以这么写:
var str = multiline(function(){/*
<!doctype html>
<html>
    <body>
        <h1>❤ unicorns</h1>
    </body>
</html>
*/});


原理:
  1. 在一个function中写上一段多行注释
  2. 将此function toString()
  3. 将多行注释内容用正则匹配出来


参考资料:http://ourjs.com/detail/53c8826a7a0187d41d000003
http://www.jb51.net/article/49480.htm
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值