2014-01-20 2 views
1

Я новичок в Jax-RS, и у меня возникают проблемы с использованием моего веб-сервиса от ajax. Мои запросы на получение работают так, как должно быть, и теперь я пытаюсь опубликовать некоторые данные, которые нужно сохранить в базе данных Oracle 11g, мой вызов ajax возвращает только ошибку, из-за которой сложно отлаживать.Проводка данных в Jax-RS с помощью ajax

вот мой Аякса вызов

function save(img) // base64 encoded string 
{ 


$.ajax({ 
    type: "POST", 
    url: "http://192.168.42.179:8082/PotholeWebservice/webresources/entities.pothole/post", 
    data: img, 
    dataType: "json", 
    success: function(data) 
    { 
     alert("saved to database"); 
    }, 
    error: function(textStatus, errorThrown) 
    { 
     alert("error in saving to database: " + textStatus + " " + errorThrown); 
    } 
}); 
} 

вот мой JAX-RS отправлять метод

@POST 
@Path("post") 
@Consumes({"application/xml", "application/json"}) 
public void create(@PathParam("paramImg") String paramImg) { 

    Date date = new Date(); 
    BASE64Decoder decoder = new BASE64Decoder(); // decode base64 image to byte[] 
    byte[] decodedBytes = null; 
    try { 
     decodedBytes = decoder.decodeBuffer(paramImg); 
    } catch (IOException ex) { 
     Logger.getLogger(PotholeFacadeREST.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    Pothole entity = new Pothole(decodedBytes, date); 
    super.create(entity); 

} 

супер класс

// super.create 
public void create(T entity) { 
    getEntityManager().persist(entity); 

} 

мой класс

public class Pothole implements Serializable { 
private static final long serialVersionUID = 1L; 
@Basic(optional = false) 
@NotNull 
@Lob 
@Column(name = "IMAGE") 
private byte[] image; 
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation 

@Id 
@GeneratedValue(generator = "ID_Seq") 
@SequenceGenerator(name="IDSeq",sequenceName="ID_SEQ", allocationSize=1) 
@Basic(optional = false) 
@NotNull 
@Column(name = "ID") 
private BigDecimal id; 

@Basic(optional = false) 
@NotNull 
@Column(name = "PDATE") 
@Temporal(TemporalType.TIMESTAMP) 
private Date pdate; 

public Pothole() { 
} 

public Pothole(BigDecimal id) { 
    this.id = id; 
} 

public Pothole(byte[] image, Date pdate) { 

    this.image = image; 
    this.pdate = pdate; 
} 

public byte[] getImage() { 
    return image; 
} 

public void setImage(byte[] image) { 
    this.image = image; 
} 

public BigDecimal getId() { 
    return id; 
} 

public void setId(BigDecimal id) { 
    this.id = id; 
} 

public Date getPdate() { 
    return pdate; 
} 

public void setPdate(Date pdate) { 
    this.pdate = pdate; 
} 

ответ

0

Вашего параметра метода paramImg помеченную @PathParam("paramImg") для ввода - пустая строка, потому что у вас нет соответствующего шаблона, определенного в @Path("post") (то есть @Path("post\{paramImg}"). Это может быть проблемой.

Если вы хотите ввести объект запроса в свой метод ресурса, опустите аннотацию, и JAX-RS убедится, что объект вводится.

Включите LoggingFilter (чтобы посмотреть, как посмотреть на это article), чтобы узнать, что происходит на стороне сервера. Отправьте журналы.

+0

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

0

Может быть, вы все еще оленья кожа есть веб-службы и работает, используйте:

@GET 
public String echo() { 
    return "My service is working! > " + new Date().toString(); 
} 

и использовать веб-браузер, чтобы быть уверенным, что вы можете получить доступ к нему, используя запрос Get.

Если вы не получили эхо, значит, существует высокая вероятность того, что служба не была опубликована. Может быть, вы не имеете ApplicationRestConfig, позвольте мне дать вам пример:

/** 
* Initialize the rest resources, here you should add ALL the REST classes. 
*/ 
@ApplicationPath("/rest") 
public class ApplicationRestConfig extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     return new HashSet<>(Arrays.asList(MyServiceRest.class, OtherRestService.class)); 
    } 
} 

Если даже после всех этих проверок еще не работает, проверить этот учебник> http://coenraets.org/blog/2011/12/restful-services-with-jquery-and-java-using-jax-rs-and-jersey/

+0

Служба работает и работает, мои запросы на получение работы отлично работают. Это сообщение, которое терпит неудачу. Я думаю, что это может быть связано с моим конструктором для моего класса и с последовательностью, которую я использую для ID. –

+0

вы должны создать объекты с помощью @Stateless (или @Stateful), у вас есть это? ... как выглядит ваш суперкласс? – Sergio

Смежные вопросы