Я запускаю симуляцию Spring Boot, чтобы получить JSON. И клиент Netty, настроенный для HTTP, отправит запрос на получение JSON.
Однако в моем коде это не работает. Мой код выглядит следующим образом.
This is the RestController
@RestController
@RequestMapping("/")
class BasicJsonController {
private val logger = LoggerFactory.getLogger(this.javaClass)
@Autowired
lateinit var robot: RandomRobot
@GetMapping("/robot")
fun getJson(): String? {
logger.info("Get the JSON")
return JSON.toJSONString(robot.getRobot())
}
}
А вот и клиент Netty
@Component
@Order(1)
class RobotNettyClient : ApplicationRunner{
private val logger = LoggerFactory.getLogger(this.javaClass)
override fun run(args: ApplicationArguments?) {
val group = NioEventLoopGroup()
try {
val bootstrap = Bootstrap()
bootstrap.group(group)
.channel(NioSocketChannel::class.java)
.option(ChannelOption.SO_KEEPALIVE, true)
.handler(object: ChannelInitializer<SocketChannel>() {
override fun initChannel(ch: SocketChannel?) {
val pipeline = ch?.pipeline()
// pipeline?.addLast(StringDecoder(Charset.defaultCharset()))
pipeline?.addLast(HttpRequestEncoder())
pipeline?.addLast(HttpContentCompressor())
// pipeline?.addLast(HttpObjectAggregator(65535))
pipeline?.addLast(RobotHandler())
}
})
logger.info("Netty started")
bootstrap.connect("127.0.0.1",8080).sync()
} finally {
group.shutdownGracefully()
}
}
}
Это обработчик
class RobotHandler : ChannelInboundHandlerAdapter() {
private val logger = LoggerFactory.getLogger(this.javaClass)
override fun channelRead(ctx: ChannelHandlerContext?, msg: Any?) {
logger.info(msg?.toString())
}
override fun channelActive(ctx: ChannelHandlerContext?) {
val request = DefaultHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "/robot")
ctx?.writeAndFlush(request)
}
override fun exceptionCaught(ctx: ChannelHandlerContext?, cause: Throwable?) {
cause?.printStackTrace()
ctx?.close()
}
}
Это оказалось успешным в получении JSON, однако функция channelRead никогда не запускается. Как видите, я попробовал какую-то комбинацию обработчика на клиенте, и все оказалось безуспешно.