Hamilton, who had won three of the first four grand prixs, had lost the battle for pole position and a slow getaway from the front row left the Briton playing catch-up all race.
Hamilton tried his best, clawing back second place from Ferrari’s Sebastian Vettel, but Rosberg remained well out of reach and took the chequered flag 17.5 seconds clear of his title rival.
“It was a perfect weekend. Everything worked out: the car was great, nailed the setup for the race, for qualifying. Everything came together,” Rosberg told reporters after the ninth win of his Formula One career and third Mercedes one-two of the season.
“That still we are dominating in such a way is fantastic to see,” he added.
Hamilton now has 111 points to Rosberg’s 91, with 14 races remaining and Monaco — where the German has won for the past two years — next up.
After parking his car alongside Rosberg’s, Hamilton shook the German’s hand and patted him on the back in recognition of a job well done.
His race engineer had told the champion, who made three stops to Rosberg’s two after losing time with a slow first one, to resign himself in the closing laps on a circuit where overtaking is famously difficult.
“I don’t think it would be possible with the remaining laps, we’d be better just looking after this one, let him have it (the victory),” Hamilton was told.
“Is it impossible?,” the Briton replied, with the engineer’s reply confirming that there was no hope: “He is going to respond if we pick the pace up. It would be impossible.”
Hamilton agreed that it had been a simple case of damage limitation.
“I had quite a poor start, it’s been quite a time since I had such a bad start,” he added.
Vettel, who had seized second place into the first corner, was happy to finish third but frustrated to see Mercedes still so far away.
“I’m not happy with the gap (to the front), not happy at all,” said the four-times world champion despite his fourth podium appearance of the year.
The victory was Rosberg’s first since Brazil in November and made him the ninth different winner in the last nine years at the Circuit de Catalunya.
Ferrari’s Kimi Raikkonen found himself in a Williams sandwich, finishing fifth behind fellow Finn Valtteri Bottas and ahead of Brazilian Felipe Massa.
Daniel Ricciardo was seventh but lapped for Red Bull, with team principal Christian Horner effectively writing off the season for the former champions thanks to ongoing problems with the Renault engine’s reliability and performance.
“I think we are nowhere near winning a grand prix,” added Horner.
Romain Grosjean was eighth for Lotus, while team mate Pastor Maldonado retired with a broken rear wing, and Spanish rookie Carlos Sainz scored points at home with ninth place for Toro Rosso.
The final point went to Red Bull’s Russian Daniil Kvyat, who was cleared by stewards for a defensive move on Sainz.
McLaren’s Fernando Alonso, who had hoped for his team’s first points of the year, retired after 28 laps with a brake problem that caused him to overshoot his pitstop as the jack mechanic leapt out of the way.
His team mate Jenson Button finished but said the race ranked among the scariest of his career and questioned whether McLaren would score this season.
“The first 30 laps…were the scariest laps of my life,” he declared.
Alonso’s lack of success with his new team, after five years at Ferrari, and the economic situation in Spain were blamed for empty seats earlier in the weekend but organisers said 86,700 turned up on Sunday.
(Editing by Mark Meadows)