2016-01-24 143 views
0

我正在使用Jersey框架并试图返回{"status":201}作为响应,但我得到{"status":201,"route":0}在momenat。我在另一个回复中需要SDBeanPost课程中的路线和方向,但不是全部回复。因此,我可以通过添加此行来删除响应方向bean.direction = null;,但是我不知道如何从中删除route从JSON响应中删除密钥

Receiver类

package org.busTracker.trackingService; 

/* 
* Inside this class, the request from the Android application - PostData class is received. 
* Consequently, a response is sent back. 
*/ 

import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

@Path("/data") 
public class Receiver { 
    static String flagD; 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response proccessData(Data data) { 

     Database db = new Database(); 

     String macD = data.getMac(); 
     int routeD = data.getRoute(); 
     double latD = data.getLatitude(); 
     double longD = data.getLongitude(); 
     String timeD = data.getTime(); 
     int speedD = data.getSpeed(); 
     String directionD = data.getDirection(); 
     flagD = data.getFlag(); 

     // Jackson class to wrapper the data as JSON string. 
     SDBeanPost bean = new SDBeanPost(); 
     bean.direction = null;  
     bean.status = 201; 

     return Response.status(bean.status).entity(bean.toJson()).build(); 

    } 

} 

SDBeanPost

package org.busTracker.trackingService; 

/* 
* Class to wrap the response for the Receiver class. 
*/ 

import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

//To return status without route null. 
@JsonInclude(JsonInclude.Include.NON_NULL) 
public class SDBeanPost { 

    public int status; 
    public int route; 
    public String direction; 

    public SDBeanPost() { 
     Receiver receiver = new Receiver(); 

     direction = ""; 
     status = 230; 

    } 

    public String toJson() { 

     ObjectMapper mapper = new ObjectMapper(); 
     String json = null; 
     try { 
      json = mapper.writeValueAsString(this); 
     } catch (JsonProcessingException e) { 
      e.printStackTrace(); 

     } 
     return json; 
    } 

} 
+1

为什么你返回一个SDBeanPost的实例,它有一个状态,一个路线和一个方向,因为你实际上只想返回一个状态?使用不同的班级,其中有你想要的字段,只有那些字段。另外,请勿自行序列化为JSON。泽西为你做到了这一点。在身体中返回身份也是可疑的,顺便说一句。 HTTP响应已经具有状态。所以,除非身体状态是一种完全不同的状态,否则它不应该在身体中。 –

回答

3

路线是在你的类原始int。所以当你没有明确设置它时,它的实例将具有默认值0,因此当序列化为json时,它将进入json输出。

也许你可以对非必填字段使用盒装整数(Integer),或者使用@JsonIgnoreProperties({"route"}),这样Jackson就可以忽略它。

+0

我在'@JsonInclude(JsonInclude.Include.NON_NULL)'这行之后试过'@JsonIgnoreProperties({“route”})''SDBeanPost''但我得到这个错误'JsonIgnoreProperties无法解析为类型'。如果路由和方向在请求中有价值,我只想从响应中删除路由和方向。否则,如果路由为'0',并且dierection的'“”'也在请求中为空,我想返回'{“status”:230,“route”:0。 “方向”:“”}'。 –

+0

只需检查您是否导入了JsonIgnoreProperties。此外,如果你想发送路由时,它设置,使用'Integer'而不是'int'在SDBeanPost路由 – barunsthakur

+0

好的感谢Integer对我来说是更好的选择。 –