5 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
正確的做法是不改變實(shí)體類(DO),
新建數(shù)據(jù)傳輸類(DTO),例如MemberDTO,
寫一個(gè)方法吧DO轉(zhuǎn)化成DTO,一個(gè)DTO包含的數(shù)據(jù)可能來自好幾個(gè)DO,就像你現(xiàn)在需要傳輸Member的數(shù)據(jù),如果需要其他表的一些屬性怎么辦。
DO是保持和數(shù)據(jù)庫一致的,DTO是保持跟外界交互一致的,這樣在數(shù)據(jù)或者業(yè)務(wù)發(fā)生變動(dòng)的時(shí)候,可以靈活的調(diào)整。
千萬不要把DO直接拿來做數(shù)據(jù)傳輸,這樣不利于擴(kuò)展

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
這個(gè)跟Mybatis沒有半毛錢關(guān)系吧,應(yīng)該是json序列化的配置問題。
我假設(shè)你用的是SpringMVC+Jackson,Jackson的序列化配置如下:
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="serializationInclusion" value="NON_NULL"/><!-- 重點(diǎn):只輸出非NULL字段 -->
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
可以看一下@JsonInclude的幾個(gè)枚舉變量對(duì)應(yīng)的含義,個(gè)人認(rèn)為最理想的應(yīng)該是用NON_EMPTY,這個(gè)會(huì)把空對(duì)象、空數(shù)組也不輸出(例如:{}, [])。但要注意的是:0也會(huì)被認(rèn)為是EMPTY從而不輸出(意味著所有沒賦值或?yàn)?的int類型或Integer對(duì)象都不會(huì)被輸出)。

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
將對(duì)象轉(zhuǎn)換為JSON時(shí)(序列化過程),如果對(duì)象的某個(gè)屬性值為null,則該屬性不參與序列化,生成的JSON結(jié)果也不會(huì)包含該屬性。代碼如下:
public String toNotifyBody(NotifyBean bean) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("orderId", bean.orderId);
map.put("title", bean.title);
map.put("subject", bean.subject);
map.put("operateType", bean.operateType);
map.put("handlePerson", bean.handlePerson);
map.put("extractPerson", bean.extractPerson);
map.put("sla", bean.sla);
return JSON.toJSONString(map);
}
將上述參數(shù),放在map中,然后調(diào)用json的方法JSON.toJSONString()的時(shí)候,對(duì)于null值,是不傳輸?shù)?。我們看一下JSON.toJSONString()方法的實(shí)現(xiàn)。
public static final String toJSONString(Object object) {
return toJSONString(object, new SerializerFeature[0]);
}
public static final String toJSONString(Object object, SerializerFeature... features) {
SerializeWriter out = new SerializeWriter();
try {
JSONSerializer serializer = new JSONSerializer(out);
for (com.alibaba.fastjson.serializer.SerializerFeature feature : features) {
serializer.config(feature, true);
}
serializer.write(object);
return out.toString();
} finally {
out.close();
}
}

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果沒有實(shí)體類,暴露數(shù)據(jù)表字段是必然的。
不知道你使用的什么方法生成 JSON,不過理論上來說,應(yīng)該會(huì)有一個(gè)忽略空值的參數(shù),找找看,如果實(shí)在找不到,可以用正則表達(dá)式把空屬性去掉。

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
添加回答
舉報(bào)