我正在使用OpenFeign / feign发送API请求:
import feign.Body
import feign.Param
import feign.RequestLine
interface ApiServiceInterface {
@RequestLine("POST /container/{cid}/key/bulk")
@Body("{bulk}")
public void bulk(@Param("cid") Long cid, @Param("bulk") Bulk bulk)
}
@Body("{bulk}")
无效,因为它将对象转换为字符串:
[ApiServiceInterface#bulk] ---> POST http://localhost:5050/container/11/key/bulk HTTP/1.1
[ApiServiceInterface#bulk] Content-Length: 45
[ApiServiceInterface#bulk]
[ApiServiceInterface#bulk] com.***.tns.hoth.key.bulk.Bulk@5dd5fb75
[ApiServiceInterface#bulk] ---> END HTTP (45-byte body)
有没有办法自动将对象转换为JSON对象?
这是我构建Feign.Builder
:
def mapper = new ObjectMapper()
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
mapper.readerForUpdating(this)
return Feign.builder()
.logger(new Logger.JavaLogger().appendToFile("logs/hoth.log"))
.logLevel(Logger.Level.BASIC)
.decoder(new JacksonDecoder(mapper))
.encoder(new JacksonEncoder(mapper))
答案 0 :(得分:0)
使用时从OpenFeign的文档中
@Body("{bulk}")
public void bulk(@Param("cid") Long cid, @Param("bulk") Bulk bulk)
Bulk
对象toString()
用于映射参数值。如果要将Bulk
对象转换为必要的json字符串,只需执行以下操作
public void bulk(@Param("cid") Long cid, @RequestBody Bulk bulk)
您不必放置@Body
注释。
希望这会有所帮助。
答案 1 :(得分:-1)
你可以尝试
def feignJson = JsonSlurper.toJson(feignObject)
然后,可选择
def pretyJsonOutput = JsonOutput.prettyPrint(feignJson)