5

我正在使用带注释的控制器和内容协商 (@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}'

当然,我可以使用 DTO 模式并以不同的方法返回不同的 DTO(例如分别为 {{FooDTO1}} 和 {{FooDTO2}}),然后为这些 DTO 注册不同的 JSON 序列化程序。但我想知道是否有更好的方法,就我而言,定义两个额外的 DTO 类并创建这些类的一次性实例只是为了应用正确的 JSON 序列化程序,这感觉不对。我不能以某种方式暗示 Spring 或 Jackson 在哪种情况下应该使用哪个 Serializer 吗?

4

2 回答 2

1

正如@CodeChimp 所建议的,不同的请求内容类型可用于在同一资源的不同表示之间切换。它与 REST 哲学相对应,并且直接支持,Spring因为它依赖于内容类型来选择序列化程序。所以,我需要做的就是为Foo每个绑定到不同内容类型的类注册两个序列化程序。例如,application/json-vnd.myCompany.com+type1表示将由相应地产生。然后由客户决定选择哪种表示。Serializer1application/json-vnd.myCompany.com+type2Serializer2

于 2013-08-28T12:38:23.327 回答
-1
want the JSON representation of the {{Foo}} to be different for those methods

那么你肯定需要不同的序列化程序和 foos。无法逃避事实。和它更可取的恕我直言。

于 2013-06-11T09:58:08.100 回答