Ale*_*yda 5 spring-mvc content-negotiation jackson
我正在使用带注释的控制器和内容协商(@ResponceBody)创建 REST 服务。我有两个不同的控制器方法返回 {{Foo}} 的实例,它们服务于不同的用例,并且我希望这些方法的 {{Foo}} 的 JSON 表示形式不同。
例如:
@ResponseBody
public Foo method1() {... return new Foo(123); } // should produce '123'
@ResponseBody
public Foo method2() {... return new Foo(123); } // should produce '{name:"Foo", number:123}'
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用 DTO 模式并在不同的方法中返回不同的 DTO(例如分别为 {{FooDTO1}} 和 {{FooDTO2}}),并简单地为这些 DTO 注册不同的 JSON 序列化器。但我想知道是否有更好的方法,对我来说,定义两个额外的 DTO 类并仅为了应用正确的 JSON 序列化器而创建这些类的一次性实例是错误的。我不能以某种方式向 Spring 或 Jackson 暗示哪种情况应该使用哪种序列化器吗?
正如@CodeChimp所建议的,不同的请求内容类型可用于在同一资源的不同表示之间切换。它符合 REST 理念,并且直接受支持,Spring因为它依赖于内容类型来选择序列化器。因此,我需要做的就是为类注册两个序列化器,Foo每个序列化器绑定到不同的内容类型。例如,代表性将相应地application/json-vnd.myCompany.com+type1产生。选择哪种代表将由客户决定。Serializer1application/json-vnd.myCompany.com+type2Serializer2
| 归档时间: |
|
| 查看次数: |
2341 次 |
| 最近记录: |