# Manipulating Results ## Changing the default Content-Type The result content type is automatically inferred from the Scala value that you specify as the response body. For example: ```scala val textResult = Ok("Hello World!") ``` Will automatically set the `Content-Type` header to `text/plain`, while: ```scala val xmlResult = Ok(Hello World!) ``` will set the Content-Type header to `text/xml`. > **Tip:** this is done via the `play.api.http.ContentTypeOf` type class. This is pretty useful, but sometimes you want to change it. Just use the `as(newContentType)` method on a result to create a new similar result with a different `Content-Type` header: ```scala val htmlResult = Ok(

Hello World!

).as("text/html") ``` or even better, using: ```scala val htmlResult = Ok(

Hello World!

).as(HTML) ``` > **Note:** The benefit of using `HTML` instead of the `"text/html"` is that the charset will be automatically handled for you and the actual Content-Type header will be set to `text/html; charset=utf-8`. We will see that in a bit. ## Manipulating HTTP headers You can also add (or update) any HTTP header to the result: ```scala Ok("Hello World!").withHeaders( CACHE_CONTROL -> "max-age=3600", ETAG -> "xx" ) ``` Note that setting an HTTP header will automatically discard the previous value if it was existing in the original result. ## Setting and discarding cookies Cookies are just a special form of HTTP headers but we provide a set of helpers to make it easier. You can easily add a Cookie to the HTTP response using: ```scala Ok("Hello world").withCookies( Cookie("theme", "blue") ) ``` Also, to discard a Cookie previously stored on the Web browser: ```scala Ok("Hello world").discardingCookies("theme") ``` ## Changing the charset for text based HTTP responses. For text based HTTP response it is very important to handle the charset correctly. Play handles that for you and uses `utf-8` by default. The charset is used to both convert the text response to the corresponding bytes to send over the network socket, and to alterate the `Content-Type` header with the proper `;charset=xxx` extension. The charset is handled automatically via the `play.api.mvc.Codec` type class. Just import an implicit instance of `play.api.mvc.Codec` in the current scope to change the charset that will be used by all operations: ```scala object Application extends Controller { implicit val myCustomCharset = Codec.javaSupported("iso-8859-1") def index = Action { Ok(

Hello World!

).as(HTML) } } ``` Here, because there is an implicit charset value in the scope, it will be used by both the `Ok(...)` method to convert the XML message into `ISO-8859-1` encoded bytes and to generate the `text/html; charset=iso-8859-1` Content-Type header. Now if you are wondering how the `HTML` method works, here it is how it is defined: ```scala def HTML(implicit codec: Codec) = { "text/html; charset=" + codec.charset } ``` You can do the same in your API if you need to handle the charset in a generic way. > **Next:** [[Session and Flash scopes | ScalaSessionFlash]]