嗨,我有一个简单的休息服务:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Product createProduct(Product product) {
if (!(productDao.findByName(product.getProductName()).isEmpty())) {
//?????
} else {
productDao.create(product);
//?????
}
return product;
}
当输入名称不正确并且方法 findByName 返回不为空时,我希望从我的其余服务方法返回仅 Angular 信息,例如“产品存在”。当方法 findByName 返回 null 并创建产品时,我希望将产品从我的方法返回到 Angular Controller 。怎么处理呢?返回实体和信息?
我在 Angular Controller 中如何处理它?当我返回实体时,下面的 Controller 工作正常,但我现在不知道为什么要处理信息“产品存在”而不是实体?
$scope.addProduct = function (product) {
$http.post(serviceURI + "products", product).success(function (data) {
$scope.products.push(data);
$('.success-message').fadeIn(1000).delay(5000).fadeOut(1000);
$scope.message = "Product added";
}).error(function (error) {
$('.error-message').fadeIn(1000).delay(5000).fadeOut(1000);
$scope.message = "Error";
});
}
从 JAX-RS 返回数据和信息并将其获取到 Angular Controller 的最佳实践是什么?
最佳答案
由于 RESTFul Web 服务使用 HTTP 词汇表,我建议根据操作结果返回不同的 HTTP 状态代码。
在第一种情况下,您可以抛出 WebApplicationException带有 4xx 系列的状态代码。
在第二种情况下,您可以使用默认状态代码(我认为在本例中为 200),或者通过返回 Response 来提供更具体的状态代码,例如 201(已创建)对象而不是直接产品。 例如。 Response.created可能对你有帮助。
关于java - JAX-RS 和 AngularJS 之间的请求和响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735077/