zoukankan      html  css  js  c++  java
  • 2017.02.14

    1.controller中,如果设置某个http接口,入参设置了required = true,那么如果在调用http接口时,没传参数。就会报404错误。因为你要求必须传参数了,这种情况下即使URL路径对,但没传参数,依然会报404错误,代表没有对应的路径。

    2.ResponseStatusExceptionResolver

    用来支持ResponseStatus的使用,处理使用了ResponseStatus注解的异常,根据注解的内容,返回相应的HTTP Status Code和内容给客户端。如果Web应用程序中配置了ResponseStatusExceptionResolver,那么我们就可以使用ResponseStatus注解来注解我们自己编写的异常类,并在Controller中抛出该异常类,之后ResponseStatusExceptionResolver就会自动帮我们处理剩下的工作。

    这是一个自己编写的异常,用来表示订单不存在:

    @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order") // 404
    public class OrderNotFoundException extends RuntimeException {
    // ...
    }
    这是一个使用该异常的Controller方法:

    @RequestMapping(value="/orders/{id}", method=GET)
    public String showOrder(@PathVariable("id") long id, Model model) {
    Order order = orderRepository.findOrderById(id);
    if (order == null) throw new OrderNotFoundException(id);
    model.addAttribute(order);
    return "orderDetail";
    }
    这样,当OrderNotFoundException被抛出时,ResponseStatusExceptionResolver会返回给客户端一个HTTP Status Code为404的响应。

    3.刚在复习多线程的时候突然有个疑问:
    我们都知道WEB容器对于每个请求都是启动一个多线程来处理,那不是所有业务层的代码都要考虑到同步问题。举两个场景:
    1. 业务层类有个全局变量count,某个方法使count++,如果两个请求同时调用该方法,count不就有可能+2了,反正就是典型的同步问题。我的意思就是所有业务层代码都要考虑同步?

    4.每次访问action都是重新new的,但是service都是用的同一个(典型的ssh场景),因此如果在service里定义了共享变量,就需要考虑同步问题。
    5.1.在String类中的hashCode是根据String类中包含的字符串获取的,根据哈希算法获取到一个哈希码,那么只要我的字符内容是相等的,我的哈希码也是相同的。
    3.Object类中的hashCode则和之前的不一样了,他是根据对象的内存地址经过哈希算法之后获取到的哈希码,由于每个对象的内存地址不相同,所以hashCode是不同的。
    所以我们一般用string作为hashmap的key,这样能节省下来自己写hashcode。
    只要key不一样,value可以随便相同的。因为要确保hashcode的key不一样。
    hashTestClass.addToHashMap("1", user1);
    hashTestClass.addToHashMap("2", user1);
    这样是随便可以的。

    6.hashmap怎样遍历?
    Iterator<Entry<String, User>> iterator = usersHashMap.entrySet().iterator();
    while (iterator.hasNext()) {
    Entry<String, User> entry1 = iterator.next();
    String nameString = entry1.getValue().getNameString();
    logger.info(nameString);
    }
    效率高,以后一定要使用此种方式!
    第二种:
      Map map = new HashMap();
      Iterator iter = map.keySet().iterator();
      while (iter.hasNext()) {
      Object key = iter.next();
      Object val = map.get(key);
      }
      效率低,以后尽量少使用!

  • 相关阅读:
    JAVA THINGKING (二)随笔
    HP-UX磁带备份错误收集
    在cocos2d-x界面中嵌入Android的WebView
    PIMPL设计模式的理解和使用
    10453 Make Palindrome (dp)
    linux swap 分区调控(swap分区 lvm管理)
    如何让ios app支持32位和64位?
    数据持久化(二)存取沙箱文件
    [置顶] lvs-tun隧道模式搭建
    【D3.V3.js系列教程】--(十五)SVG基本图形绘制
  • 原文地址:https://www.cnblogs.com/panxuejun/p/6402739.html
Copyright © 2011-2022 走看看