pekko/akka-docs/rst/scala/http/routing-dsl/directives/marshalling-directives/handleWith.rst
2016-01-14 00:31:03 +01:00

47 lines
2.2 KiB
ReStructuredText

.. _-handleWith-:
handleWith
==========
Signature
---------
.. includecode2:: /../../akka-http/src/main/scala/akka/http/scaladsl/server/directives/MarshallingDirectives.scala
:snippet: handleWith
Description
-----------
Completes the request using the given function. The input to the function is produced with
the in-scope entity unmarshaller and the result value of the function is marshalled with
the in-scope marshaller. ``handleWith`` can be a convenient method combining ``entity`` with
``complete``.
The ``handleWith`` directive is used when you want to handle a route with a given function of
type A ⇒ B. ``handleWith`` will use both an in-scope unmarshaller to convert a request into
type A and an in-scope marshaller to convert type B into a response. This is helpful when your
core business logic resides in some other class or you want your business logic to be independent
of the REST interface written with akka-http. You can use ``handleWith`` to "hand off" processing
to a given function without requiring any akka-http-specific functionality.
``handleWith`` is similar to ``produce``. The main difference is ``handleWith`` automatically
calls ``complete`` when the function passed to ``handleWith`` returns. Using ``produce`` you
must explicity call the completion function passed from the ``produce`` function.
See :ref:`marshalling <http-marshalling-scala>` and :ref:`unmarshalling <http-unmarshalling-scala>` for guidance
on marshalling entities with akka-http.
Examples
--------
The following example uses an ``updatePerson`` function with a ``Person`` case class as an input and output. We plug this function into our route using ``handleWith``.
.. includecode2:: ../../../../code/docs/http/scaladsl/server/directives/MarshallingDirectivesExamplesSpec.scala
:snippet: person-case-class
.. includecode2:: ../../../../code/docs/http/scaladsl/server/directives/MarshallingDirectivesExamplesSpec.scala
:snippet: example-handleWith-with-json
The PersonJsonSupport object handles both marshalling and unmarshalling of the Person case class.
.. includecode2:: ../../../../code/docs/http/scaladsl/server/directives/MarshallingDirectivesExamplesSpec.scala
:snippet: person-json-support