【发布时间】:2018-02-11 10:32:51
【问题描述】:
我使用 Angular 5 + Spring Boot。问题是我无法通过 post 方法将信息发送到我的休息控制器。 我没有从客户端或服务器端收到任何错误。 在代码下方,您将看到我使 get 方法正常工作。 让我为我的英语道歉。
弹簧实体 { Dish }
@Entity
@Table(name = "DISHES")
@Data
public class Dish implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private Long id;
@Column(name = "NAME", unique = true)
@NotNull(message = "Ястието трябва да има име.")
@Size(min = 3, max = 30, message = "Името на ястието трябва да е между 3 и 30 символа.")
private String name;
@Column(name = "DESCRIPTION")
@NotNull(message = "Описанието на ястието не може да е празно.")
@Size(min = 3, max = 300, message = "Описанието на ястието трябва да е между 3 и 30 символа.")
private String description;
@JsonIgnore
@OneToMany(cascade = CascadeType.ALL ,mappedBy = "dish")
@JsonBackReference
private List<DishCounter> dishCounters;
}
角度实体 {Dish}
export class Dish {
constructor(public id?: number, public name?: string, public description?: string) {
}
}
Spring Rest 控制器 {Dish}
@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/dish")
public class DishRestController {
private static final Logger logger = LoggerFactory.getLogger(DishRestController.class);
private final DishService dishService;
@Autowired
public DishRestController(final DishService dishService) {
this.dishService = dishService;
}
@GetMapping("/all")
public ResponseEntity<List<Dish>> getAllDishes() {
logger.info("Rest controller find all dishes");
List<Dish> dishes = dishService.getAllDishes();
return ResponseEntity.status(HttpStatus.OK).body(dishes);
}
@PostMapping("/save")
public ResponseEntity<Void> saveDish(@RequestBody Dish dish) {
dishService.saveDish(dish);
return new ResponseEntity<>(HttpStatus.OK);
}
}
和 Angular 发布方法
save(dish: Dish): Observable<Dish> {
let result: Observable<Dish>;
result = this.http.post(this.saveDishUrl, dish)
.map((resp => {
console.log(resp);
return resp;
}))
.catch(e => {
console.log(e);
return Observable.throw(e);
});
console.log(result);
return result;
}
【问题讨论】:
-
很难相信客户端和服务器端都没有任何错误。特别要仔细检查控制台和网络选项卡,检查请求是否发送以及响应是什么。
-
您的 Angular 发布方法看起来很奇怪。不要在这里返回任何东西。相反 ...map((resp:Response) => resp.json()) 应该可以解决问题。并删除 catch 子句中的“return”。
-
我是 Angular 的新手。我是这样写的:
return this.http.post(this.saveDishUrl, dish) .map((res: Response) => res.json()) .catch((error: any) => Observable.throw(error.json().error || 'Server error'));但还是没有。我尝试使用 PostMan 工具将数据发送到我的 RestController,一切都成功通过了,但是使用 angular 我没有成功...:/ -
你在哪里调用订阅帖子功能?我在这里看不到。由于 http post 返回一个 observable,您必须订阅它才能进行调用。
-
@DanR。谢谢 !!!这就是问题所在。将您的评论发布到我可以访问它。
标签: java angular spring-boot