Starting from pole, Hamilton never lost the lead except for one lap as he made his pit stop - but while his victory may therefore have looked easy, in truth it was a tense nip and tuck race throughout as Rosberg never let Hamilton escape.
Both were pushing hard - the Briton was asked to lift and coast more than once too conserve fuel, while Rosberg had to ease back and keep his front brake temperatures within limits at one stage. During these respective phases the gap between them opened and closed, with the pair separated by just over one second on several occasions. In the final laps however Hamilton eased away, allowing him to win by 2.2s despite backing off slightly on the final lap.
Victory moves him onto 151 points, 17 clear of Rosberg's 134 in the title chase.
Behind them, a spin at the hairpin on lap 27 cost Kimi Raikkonen and Ferrari the final podium slot, and after a hard drive that position fell deservedly to his countryman Bottas.
Having started 18th, Sebastian Vettel drove through to fifth - despite a brush with McLaren's Fernando Alonso - while Felipe Massa did likewise from 15th to take sixth in the other Williams.
Lotus had both cars in the points for the first time this season, though it could have been better than it was. In the end, Pastor Maldonado opened his 2015 tally with a solid seventh, but Romain Grosjean threw away the chance of fifth when he tagged Will Stevens' Marussia heading into the final corner on the 49th lap. Both cars had to veer into the pits, and the Frenchman fell to an eventual 10th at the flag. He was also given a five-second penalty for the incident, but had a sufficient margin over Force India's Sergio Perez to hold onto the final point.
Perez's team mate Nico Hulkenberg meanwhile lost ground after an incident with Vettel, again in the final chicane, on the 43rd lap. As Vettel attempted to pass him on the outside on turn-in, Hulkenberg had to go over the inside kerb and spun. The stewards decided it was a racing incident.
Daniil Kvyat took an unhappy ninth for Red Bull, fending off Grosjean to the flag, as Perez led home Carlos Sainz and last year's bitterly disappointed winner Daniel Ricciardo in the second Red Bull. Sauber's Marcus Ericsson had a mighty battle with Toro Rosso's Max Verstappen and kept him at bay to take 14th, as Felipe Nasr brought the other Sauber home 16th ahead of Marussia's Will Stevens, who was the final finisher.
Besides the Marussia of Roberto Merhi, neither of the McLarens made the finish in what was a disastrous race for the team. Jenson Button had to serve a drive-through penalty within the first three laps after failing to qualifying because of engine troubles, and then suffered the same exhaust problem which had taken out Fernando Alonso.