我正在尝试使用 Java 客户端将新资源发布到 django sweetpie API,但我收到了 Http 500 错误代码。基本上我只是想从客户端对我的 api 进行新的预订。
楷模:
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
def __unicode__(self):
return self.name
class Product(models.Model):
author = models.ForeignKey(Author)
name = models.CharField(max_length=100)
genre = models.CharField(max_length=100)
pub_date = models.DateTimeField()
class Reservation(models.Model):
user = models.ForeignKey(User)
product = models.ForeignKey(Product)
reserv_date_start = models.DateTimeField()
reserv_finish = models.DateTimeField()
penalty = models.BooleanField()
def __unicode__(self):
return self.product.name
资源:
class AuthorResource(ModelResource):
#user = fields.ForeignKey(UserResource, 'user')
class Meta:
queryset = Author.objects.all()
resource_name = 'author'
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
class ProductResource(ModelResource):
author = fields.ForeignKey(AuthorResource, 'author')
class Meta:
queryset = Product.objects.all()
resource_name = 'product'
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
class ReservationResource(ModelResource):
product = fields.ForeignKey(ProductResource, 'product')
class Meta:
queryset = Reservation.objects.all()
resource_name = 'reservation'
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
我要发布的 json (我正在使用 java simple json 并且我得到了反斜杠,但我不知道如何取出它):
public JSONObject encodeJsonObject(Reservation reservation){
JSONObject obj=new JSONObject();
obj.put("id",String.valueOf(reservation.getId()));
obj.put("product","/api/reservation/product/"+reservation.getProduct().getId()+"/");
obj.put("reserv_date_start",new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'+00:00'").format(reservation.getReserv_date_start()));
obj.put("reserv_finish",new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'+00:00'").format(reservation.getReserv_finish()));
obj.put("resource_uri", "/api/reservation/reservation/"+reservation.getId()+"/");
obj.put("penalty",reservation.isPenalty());
return obj;
}
json: {
"product": "\/api\/reservation\/product\/12\/",
"id": "7",
"reserv_finish": "2013-01-05T23:11:51+00:00",
"resource_uri": "\/api\/reservation\/reservation\/7\/",
"penalty": false,
"reserv_date_start": "2013-01-05T23:11:51+00:00"
}
我的客户发布代码:
public void apacheHttpClientPost(String url, String user, char[] pass, JSONObject data) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM),
new UsernamePasswordCredentials(user, new String(pass)));
HttpPost postRequest = new HttpPost(url);
StringEntity input = new StringEntity(data.toJSONString());
input.setContentType("application/json");
postRequest.setEntity(input);
HttpResponse response = httpClient.execute(postRequest);
if (response.getStatusLine().getStatusCode() != 201) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpClient.getConnectionManager().shutdown();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
调试错误之一:
/usr/local/lib/python2.7/dist-packages/django/db/models/fields/init .py:808: RuntimeWarning:DateTimeField收到一个天真的日期时间(2013-01-04 17:31:57)而时间区域支持处于活动状态。运行时警告)
我发布到
“http://localhost:8000/api/reservation/reservation/”