在 Spring 4 中从同一 REST 端点返回特定于客户端的响应



我的 Spring 启动应用程序中有一个以下 REST 端点。

/employees

这将返回以下响应。

{
    "id": 1,
    "firstName": "John",
    "lastName": "Doe",
    "department": "IT",
    "salary": "$5000"
    ...
    //There are more here
}

现在,我需要让两个不同的客户端使用此端点。但是只需要从这个端点知道部分信息。

所以对于client1,输出如下:

{
    "id" : 1,
    "firstName" : "John",
    "lastName" : "Doe"
}

而对于其他客户端(client2(,响应应该是。

{
    "id" : 1,
    "department": "IT",
    "salary": "$5000"
}

我怎样才能解决这个问题是最好的方法?

客户端 1 和客户端 2 将通过其身份验证详细信息进行区分。也许是指定如何过滤响应实体的配置。这样,每当我配置新客户端时,我都可以为客户端创建一个新配置,并负责响应过滤。

您可以在

控制器类中自动连接HttpServletRequest对象,然后使用它来获取客户端详细信息,如标头或用户代理信息。然后,这些信息可用于检查客户端类型,并相应地构建和发送响应日期。

你可以

这样做:

客户端 - 1:

ResponseEntity<ObjectType1> result = restTemplate.exchange(url, HttpMethod.POST, ObjectType1.class);

客户端 - 2:

ResponseEntity<ObjectType2> result = restTemplate.exchange(url, HttpMethod.POST, ObjectType2.class);

自定义对象应如下所示的位置

public class ObjectType1{
   int id;
   String firstName;
   String lastName;
   //default Constructor & getter & setters
}
public class ObjectType1{
    int id;
    String department;
    String salary;
    //default Constructor & getter & setters
}

在上述情况下,spring/对象映射器将自动将返回的响应/参数映射到所需的对象参数(对象类型1 或对象类型2(

您应该调查杰克逊的 json 视图功能。您可以使用同一对象,但根据视图筛选字段。您可以在此问题中找到更多详细信息

最新更新