我在servlet中有一个Java类,它使用GSON将发布的JSON字符串呈现到Java对象中。该方法的优点在于,GSON过滤掉了与类属性不匹配的所有JSON元素,因此我永远不会得到我不想处理的JSON内容。 servlet的doPost(简化)如下所示:
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
PrintWriter out = null;
try {
InputStream in = request.getInputStream();
Demo d = Demo.load(in);
in.close();
response.setContentType("text/plain");
response.setStatus(HttpServletResponse.SC_OK);
out = response.getWriter();
out.println(d.toJson);
} catch (Exception e) {
e.printStackTrace();
out.println(e.getMessage());
}
out.close();
}
Demo类(我需要在common.js或node.js中重新创建的那个类看起来像这样:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Demo implements Serializable {
public static Demo load(InputStream in) {
Demo result = null;
try {
Gson gson = new GsonBuilder().create();
result = gson.fromJson(new InputStreamReader(in), Demo.class);
} catch (Exception e) {
result = null;
}
return result;
}
@TypeDiscriminator
@JsonProperty("_id")
private String id = UUID.randomUUID().toString();
private Date created = new Date();
private String color;
private String name;
private String taste;
public String getColor() {
return this.color;
}
public String getName() {
return this.name;
}
public String getTaste() {
return this.taste;
}
public Date getCreated() {
return this.created;
}
public String getId() {
return this.id;
}
public void setName(String name) {
this.name = name;
}
public void setTaste(String taste) {
this.taste = taste;
}
public void setColor(String color) {
this.color = color;
}
public String toJson() {
GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
gb.disableHtmlEscaping();
Gson gson = gb.create();
return gson.toJson(this);
}
}
显然,我删除了所有的处理逻辑,而servlet只是回复了JSON,这不是应用程序所做的,而是用来说明这一点。我可以在该示例中在HTTP Post中抛出任何String,我只获得有效的Demo对象。
我如何在node.js中做这样的事情?
答案 0 :(得分:1)
Node.js是Javascript,因此内置了对json的支持。您可以使用JSON.parse将字符串转换为json并将其包装在try catch块中。
要仅包含选择属性,我知道的节点中没有内置功能,除非您使用Mongodb和mongoose,但您可以执行以下操作:拥有"类"这是一个包含你想要的所有属性的对象,并从解析后的json对象中删除那些不在那个" class"宾语。
var class = {x: null, y:null};
for(var prop in object){
if (!class.hasOwnProperty (prop)) {
delete object [prop]
}
最好将此类用作对象并公开parseJSON函数以封装此功能