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

时间:2017-05-16 14:42:15

标签: spring spring-boot spring-security spring-aop spring-rest

我在Spring Boot Application中有一个以下的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"
}
  

如何以最佳方式解决此问题?

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

3 个答案:

答案 0 :(得分:0)

你可以这样做:

客户 - 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 / object mapper会自动将返回的响应/参数映射到您需要的对象参数(objectType1或objectType2)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你应该调查杰克逊的json视图功能。您可以使用相同的对象,但可以根据视图过滤字段。您可以在this question

找到更多详情