2014-10-15 13 views
0

Я пытаюсь создать службу REST, которая будет принимать в JSON как входной сигнал в методе POST. Затем служба сохранит это в DB и возвращает ответ. Я создал класс под названием jsonFormat, как это было сделано в этом question. Код для этого класса -Неподдерживаемый тип носителя - служба REST

import javax.xml.bind.annotation.XmlRootElement; 

/** 
* 
* @author Aj 
* This class forms the format of the JSON request which will be recieved from the App 
*/ 
@XmlRootElement 
public class JsonFormat { 
    public double longitude; 
    public double latitude; 
    public long IMSI; 

    public JsonFormat(){} 

    public JsonFormat(double longitude,double latitude, long IMSI){ 
     this.longitude = longitude; 
     this.latitude = latitude; 
     this.IMSI = IMSI; 
    } 

} 

Однако, я все еще получаю неподдерживаемый тип носителя HTTP 415 ответ.

Я тестирую, используя POSTMAN для хром.

Вот мой код для реализации службы -

import javax.ws.rs.core.Context; 
import javax.ws.rs.core.UriInfo; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PUT; 
import javax.ws.rs.POST; 

import org.json.simple.JSONObject; 

/** 
* REST Web Service 
* 
* @author Aj 
*/ 
@Path("Offers") 
public class OffersResource { 

    @Context 
    private UriInfo context; 

    /** 
    * Creates a new instance of OffersResource 
    */ 
    public OffersResource() { 
    } 

    @Path("/storeMovement") 
    @POST 
    @Consumes("application/json") 
    @Produces("application/json") 
    public String storeTrace(JsonFormat jsonObj) { 
     JSONObject response = new JSONObject(); 
     String ret = ""; 
     try { 
      RecordMovement re = new RecordMovement(jsonObj.longitude, jsonObj.latitude, jsonObj.IMSI); 
      ret = re.Store(); 

      // Clear object 
      re = null; 
      System.gc(); 

      response.put("status", ret); 
     } catch (Exception e) { 
      response.put("status", "fail"); 
     } 
     return response.toJSONString(); 
    } 

    /** 
    * PUT method for updating or creating an instance of OffersResource 
    * 
    * @param content representation for the resource 
    * @return an HTTP response with content of the updated or created resource. 
    */ 
    @PUT 
    @Consumes("application/json") 
    public void putJson(String content) { 
    } 
} 

JSON, который я передаю это - {"longitude": "77.681307", "latitude": "12.8250278", "IMSI": "404490585029957"}

При подаче запроса я удостоверился, чтобы установить тип в POST а Правильный URL (http://localhost:8080/Offers/webresources/Offers/storeMovement).

Может кто-нибудь, пожалуйста, взгляните и сообщите, что я делаю неправильно? Я прошел через несколько сайтов, где ошибка связана главным образом с тем, что не задан тип контента, но это явно не так!

+0

Просто заметив, что вы используете @XmlRootElement для класса, работающего с json. Но вам, вероятно, понадобится парсер, например, Джексон для вашего класса JsonFormat. –

+0

@AndreasGnyp Вы хотите использовать ObjectMapper от Jackson в конструкторе моего класса JSONFormat? –

+0

Да. Я использовал его с методами, но он мог работать и с конструктором. Возможно, вам также придется написать картографию самостоятельно. –

ответ

0

Решено.

Я перешел от использования модели к строковой переменной. Затем я использую JSONParser для разбора json Строка, принятая в качестве параметра, а затем тип, отбрасывающий ее до JSONObject. Вот мой модифицированный код:

@Path("/storeMovement") 
@POST 
@Consumes("application/json") 
@Produces("application/json") 
public String storeTrace(String json) { 
    JSONObject response = new JSONObject(); 
    JSONParser parser = new JSONParser(); 
    String ret = ""; 

    try { 
     Object obj = parser.parse(json); 
     JSONObject jsonObj = (JSONObject) obj; 

     RecordMovement re = new RecordMovement((double) jsonObj.get("longitude"), (double) jsonObj.get("latitude"), (long) jsonObj.get("IMSI")); 
     ret = re.Store(); 

     // Clear object 
     re = null; 
     System.gc(); 

     response.put("status", ret); 
    } catch (Exception e) { 
     response.put("status", "fail " + e.toString()); 
    } 
    return response.toJSONString(); 
} 
Смежные вопросы