Java Servlet中的强制转换问题

Java Servlet中的强制转换问题,java,servlets,Java,Servlets,我有一个servlet程序。这是我的代码: public class CompanionProxy extends HttpServlet { DeviceDAOHibernateImpl daoImpl = null; Logger log = Logger.getLogger("CompanionProxy"); public void init(){ daoImpl = new DeviceDAOHibernateImpl(); Pr

我有一个servlet程序。这是我的代码:

public class CompanionProxy extends HttpServlet {
    DeviceDAOHibernateImpl daoImpl = null;
    Logger log = Logger.getLogger("CompanionProxy");
    public void init(){
        daoImpl = new DeviceDAOHibernateImpl();
        ProxyParser parser = ProxyParserFactory.getParser(ProxyParser.Type.XML);
        log.info("Config file Path "+parser.getClass().getName());
        ArrayList<Device> aDeviceList = parser.parse("c:\\proxy_setup_load.xml");//CommonConstants.CONFIG_FILE_PATH);
        for (Iterator iterator = aDeviceList.iterator(); iterator.hasNext();) {
            Device device = (Device) iterator.next();
            try {
                daoImpl.create(device);
            } catch (ProxyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        try {
            List<Device> listDevices = daoImpl.list();
            for (Iterator iterator = listDevices.iterator(); iterator.hasNext();) {
                Device device = (Device) iterator.next();
                log.info(device.toString());
            }
        } catch (ProxyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        @SuppressWarnings("unchecked")
        Map<String, String> map = request.getParameterMap();
        log.info(map.toString());
        HashMap<String, String> requestMap  = new HashMap<String, String>();
        requestMap.putAll(map);
        requestMap.put(CommonConstants.DEVICE_IP, request.getRemoteAddr());
        String reqType = requestMap.get(CommonConstants.REQ_PARAM);

        if (reqType.equals(CommonConstants.REGISTER_DEVICE)) {
            Device device = ProxyRequestParser.parseRegisterRequest(requestMap);
            try {
                daoImpl.create(device);
            } catch (ProxyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else if (reqType.equals(CommonConstants.UNREGISTER_DEVICE)) {
            Device device;

            try {
                device = daoImpl.findByIPAddr(requestMap.get(CommonConstants.DEVICE_IP));
                daoImpl.delete(device);
            } catch (ProxyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    // some code...

}

此错误的原因是什么?如何修复它?

检查API
getParameterMap()
返回
Map
,而不是
Map

当您从强制转换映射中检索对象时,您隐式地将其强制转换为字符串,而它应该是字符串数组

Java将“类型数组”表示为“[Ltype”

如果您确定您的请求参数是单一的(或者愿意做出这样的假设),只需通过获取数组的第一个条目来将它们展平

HashMap<String, String> requestMap  = flatten(map);

...


public static Map<String, String> flatten(Map<String, String[]> arrayMap){
  Map<String, String> r = new HashMap<String, String>();
  for (Map.Entry<String, String[]> entry: arrayMap.entrySet()){
    String[] value = entry.getValue();
    if (value !=null && value .length>0) r.put(entry.getKey(), value[0]);
  }
  return r;
}
HashMap requestMap=plant(map);
...
公共静态地图展平(地图阵列地图){
Map r=新的HashMap();
对于(Map.Entry:arrayMap.entrySet()){
String[]value=entry.getValue();
如果(value!=null&&value.length>0)r.put(entry.getKey(),value[0]);
}
返回r;
}

检查API。
getParameterMap()
返回
Map
,而不是
Map

当您从强制转换映射中检索对象时,您隐式地将其强制转换为字符串,而它应该是字符串数组

Java将“类型数组”表示为“[Ltype”

如果您确定您的请求参数是单一的(或者愿意做出这样的假设),只需通过获取数组的第一个条目来将它们展平

HashMap<String, String> requestMap  = flatten(map);

...


public static Map<String, String> flatten(Map<String, String[]> arrayMap){
  Map<String, String> r = new HashMap<String, String>();
  for (Map.Entry<String, String[]> entry: arrayMap.entrySet()){
    String[] value = entry.getValue();
    if (value !=null && value .length>0) r.put(entry.getKey(), value[0]);
  }
  return r;
}
HashMap requestMap=plant(map);
...
公共静态地图展平(地图阵列地图){
Map r=新的HashMap();
对于(Map.Entry:arrayMap.entrySet()){
String[]value=entry.getValue();
如果(value!=null&&value.length>0)r.put(entry.getKey(),value[0]);
}
返回r;
}

Map-Map=request.getParameterMap();它在logMap-Map=request.getParameterMap()中显示INFO:Map=>{req=[Ljava.lang.string;@1b9f88b};它显示INFO:Map=>{req=[Ljava.lang.string;@1b9f88b}如果你真的需要一张地图,你能帮我怎么做吗?把它展平。我添加了一个例子。你能帮我怎么做吗?如果你真的需要一张地图,把它展平。我添加了一个例子。