은밀한 전치 의존
수수께끼
다음 코드에 문제가 있습니까?
Map extraMap; //
Boolean isItemIncluded = isItemIncludingTax(extraMap.toString());
private Boolean isItemIncludingTax(String extra) {
JSONObject itemExtra = JSONObject.parseObject(extra);
return itemExtra.containsKey("tax") && "1".equals(itemExtra.get("tax"));
}
간단한 단일 테스트를 통해 다음을 확인합니다.
public class MapStringParserTest {
@Test
public void testParse() {
Map map = new HashMap<>();
map.put("a", "{\"outer\":1}");
System.out.println(map);
JSONObject parsed = JSONObject.parseObject(map.toString());
System.out.println(parsed.getString("a"));
}
}
결과 출력:
{a={"outer":1}}
com.alibaba.fastjson.JSONException: expect ':' at 0, actual =
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:290)
이상하게 던졌어.
그런데 이상하게도 프로그램이 정상적으로 작동하고 있었다.왜?맞춰봐.
수수께끼
전치의존이 있어서요.
orderItemFormatBO.setExtraMap(getExtraMap(extra));
protected Map getExtraMap(String extraJson){
if(StringUtils.isNoneEmpty(extraJson)){
try {
return JSON.parseObject(extraJson);
}catch (Exception e){
logger.error("extra fomat not valid:{}", extraJson, e);
}
}
return null;
}
설정할 때 extraMap은 JSONObject 대상으로 설정되고 toString을 호출할 때 멀티태스킹에 따라 JSONObject의 멀티태스킹 방법이 호출됩니다.이제야 문제 없어요.
public String toString() {
return this.toJSONString();
}
좋은 초거리 호응!extraMap이 새로운 비JSONObject의 Map으로 다시 설정되면 반드시 문제가 발생할 것입니다.
요행으로 피하지 마라, 비록 재난을 피했지만, 다음에는 행운으로 피할 수 있겠는가?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.