我在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将通过其身份验证详细信息进行区分。可能是指定如何过滤响应实体的配置。这样,每当我配置一个新客户端时,我都可以为客户端创建一个新的配置,并负责响应过滤。
答案 0 :(得分:0)
你可以这样做:
ResponseEntity<ObjectType1> result = restTemplate.exchange(url, HttpMethod.POST, ObjectType1.class);
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
找到更多详情