我使用REST api,需要设置几个字段。我的应用程序应始终将某些字段设置为相同的值。是否有可能使这些价值观和#34;硬编码"在假装定义的界面(或其他地方)?
我的假装声明就像是一个例子。让我们说我总是想在这个应用程序中使用相同的代理。那是可行的吗?
@RequestLine("POST /files")
@Headers("Content-Type: application/json")
default FileMetadata addFile(@Param("file_name") String fileName,
@Param("agent") String agent,
@Param("md5") String md5,
@Param("file_type") String fileType) {
return new FileMetadata.Builder().build();
}
答案 0 :(得分:2)
您有不同的选择,在使用Spring Annotations的情况下,您可以使用defaultValue
注释属性来确定默认值
@RequestParam(value = "agent", required = false, defaultValue = "AnyAgent") String agent
但是如果您使用的是netflix-feign注释,并且看起来就是您正在做的事情,则需要在路径中添加,即在@RequestLine
注释中添加:
static final String DEFAULT_VALUE_AGENT = "agent";
@RequestLine("POST /files?agent=" + DEFAULT_VALUE_AGENT)
....
但是,如果您要引用Body POST,则可以使用注释@Body
来执行此操作:
@RequestLine("POST /files")
@Body("%7B\"file_name\": \"{user_name}\", \"agent\": \"" + DEFAULT_VALUE_AGENT +"\"%7D") //... other params..
....
基于Github存储库documentation,如果您使用的是Java 8,则可以执行一个默认方法,该方法使用param常量调用另一个方法。就像下一个
@RequestLine("POST /files")
@Headers("Content-Type: application/json")
FileMetadata addFile(@Param("file_name") String fileName,
@Param("agent") String agent,
@Param("md5") String md5,
@Param("file_type") String fileType);
@RequestLine("POST /files")
@Headers("Content-Type: application/json")
default FileMetadata addFileConstant(@Param("file_name") String fileName,
@Param("md5") String md5,
@Param("file_type") String fileType) {
addFile(fileName, "constant_value", md5, fileType);
}
就我个人而言,我认为比我之前提出的其他方案更灵活。如果它们是params,那么这个想法也适用于POST Body。
答案 1 :(得分:0)
我有同样的情况。
问题解决如下:
将此添加到我要关闭的服务器上的主api(即,在接收方,而不是在发送方请求上)。
例如:
@RequestParam(value = "code", required = false, defaultValue = "AAA") String code
必填项是 required = false (而不是 required = true )。