我有一个REST客户:
import org.restlet.representation.ObjectRepresentation;
import org.restlet.data.MediaType;
ObjectRepresentation<ApprovalResponse> objectRepresentation = (ObjectRepresentation<ApprovalResponse>) cr.post(approvalRequest, MediaType.APPLICATION_JAVA_OBJECT);
和一个 Spring Boot Service RESTful api:
import org.springframework.http.MediaType;
@PostMapping(value = "/rest/approvals-submit")
public @ResponseBody ApprovalResponse submit(@RequestHeader(name="Authorization") String token, @RequestBody ApprovalRequest approvalRequest) {
System.out.println("jwt token: "+token);
System.out.println(approvalRequest.getMessageToEvaluator());
ApprovalResponse approvalResponse = new ApprovalResponse();
approvalResponse.setApprovalId("Test approvalResponse from micro service");
return approvalResponse;
}
客户端调用 API 成功。即 System.out.println(approvalRequest.getMessageToEvaluator());
成功打印出来。
问题
我的问题是响应html" target="_blank">对象没有返回到REST客户端。
错误消息
Rest客户端
org.restlet.resource。ResourceException:不可接受(406)-请求所标识的资源只能生成响应实体,这些响应实体的内容特征根据请求中发送的接受标头是不可接受的
服务器/Api
已解决的[org.springframework.web.HttpMediaTypeNotAccepable异常:找不到可接受的表示]
问题
所以我认为这些错误是因为没有正确定义MediaTypes。你知道他们应该被定义为什么吗?
我们在restendpoint的postMapping注释上添加了以下内容:
@PostMapping(value = "/rest/approvals-submit")
public @ResponseBody ApprovalResponse submit(@RequestHeader(name="Authorization") String token, @RequestBody ApprovalRequest approvalRequest, produces={MediaType.APPLICATION_JSON_VALUE,
MediaType.APPLICATION_XML_VALUE},consumes = MediaType.APPLICATION_JSON_VALUE) {
System.out.println("jwt token: "+token);
System.out.println(approvalRequest.getMessageToEvaluator());
ApprovalResponse approvalResponse = new ApprovalResponse();
approvalResponse.setApprovalId("Test approvalResponse from micro service");
return approvalResponse;
}
添加到@PostMapping批注上的这一内容产生={MediaType。应用程序_JSON_VALUE,媒体类型。APPLICATION_XML_VALUE},consumes = MediaType。应用程序_JSON_VALUE。
在客户端,我们将响应类型更改为表示,并且我们能够得到json响应:
ClientResource cr = new ClientResource(endpointUrl);
ChallengeResponse challengeResponse = new ChallengeResponse(ChallengeScheme.HTTP_OAUTH_BEARER);
challengeResponse.setRawValue(token);
cr.setChallengeResponse(challengeResponse);
Request req = cr.getRequest();
Representation representation = cr.post(approvalRequest);
System.out.println(representation.getText());
最后,使用Jackson Object Mapper,可以将响应映射到Approval响应对象:
// now convert the response to java
ObjectMapper objectMapper = new ObjectMapper();
ApprovalResponse approvalResponse = objectMapper.readValue(json, ApprovalResponse.class);
System.out.println(approvalResponse);
System.out.println(approvalResponse.getApprovalId());
这是一个内容谈判问题。内容协商是通过内容类型标头完成的,为了更好地理解它,您可以阅读此博客文章
thinkphp5编写的restful风格的API,集API请求处理,权限认证,自动生成文档等功能
本文向大家介绍Django JWT Token RestfulAPI用户认证详解,包括了Django JWT Token RestfulAPI用户认证详解的使用技巧和注意事项,需要的朋友参考一下 一般情况下我们Django默认的用户系统是满足不了我们的需求的,那么我们会对他做一定的扩展 创建用户项目 添加项目apps settings.py 编写model 扩展User model 编写seria