在我的环境中,我正在测试一些。从
Spring Boot
我返回API
。
无论如何,当我尝试在
Service
上课时收集身体,我会变得异常。服务类方法:
ResponseEntity
Controller类方法:
controller
我能够在邮递员的AS
中得到回应
@Service
public class RedisDemo {
private final RedisTemplate<String, String> redisTemplate;
@Autowired
public RedisDemo(RedisTemplate<String, String> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public Object executeCommand(String command, byte[]... parts) {
return redisTemplate.execute(connection ->
connection.execute(command, parts),
true
);
}
public ResponseEntity<?> test(){
Object object = executeCommand(
"HMGET",
"students".getBytes(),
"andrew".getBytes()
);
ArrayList list = (ArrayList) object;
return new ResponseEntity<>(list.get(0),HttpStatus.OK);
}
如果我在控制器中删除
@GetMapping("/test")
public ResponseEntity<?> test(){
ResponseEntity<?> test = redisDemo.test();
//String body = (String)test.getBody();
//System.out.println(body);
return new ResponseEntity<>(test.getBody(),HttpStatus.OK);
}
线,则为了获得响应主体。我要低于例外:
我可以在String body
中内联响应,以便我可以做一些逻辑。我从java.lang.ClassCastException: class [B cannot be cast to class java.lang.String ([B and java.lang.String are in module java.base of loader 'bootstrap')
at com.self.student.controller.MainController.test(MainController.java:113) ~[classes/:na]
我必须在内部使用
String
库或使用
responseEntity.getBody()
库。如果可以使用它们的解决方案,如何使用它们中的任何一个。
我认为你想知道,
HMGET
为什么此代码工作并返回正确的响应?
- >好吧,这是因为这一行:
redis server
实际上,该代码在独立运行时不会丢任何错误,因为它只是向前test.getbody()(是一个字节[]),而无需任何类型的铸造。春天这样照顾了它:
检查数据类型:test.getbody()是一个字节[],并且使用redistemplate.execute()从redis中拉出。
使用httpmessageconverter
:Spring自动选择ByTearrayHttpMessageConverter来处理字节[]。该转换器以二进制格式发送原始数据,默认情况下将内容类型设置为应用程序/八位字节。 将其显示在客户端sidabout您的错误:
Jackson
为什么这是发生的?
list.get(0)是一个字节[],而不是字符串。Solution:在返回IT之前将字节[]转换为字符串
ObjectMapper
现在,当您使用Postman调用API时,您仍然会得到: “安德鲁;威尔逊; ABCSCHOOL; 900”
但是这次,您的控制器将其作为适当的字符串
处理about您的错误:
public ResponseEntity<?> test() {
ResponseEntity<?> test = redisDemo.test();
return new ResponseEntity<>(test.getBody(), HttpStatus.OK);
}
发生例外是因为您的redis命令的响应主体实际上是字节数组(
return new ResponseEntity<>(test.getBody(), HttpStatus.OK);
java.lang.ClassCastException: class [B cannot be cast to class java.lang.String