Java 如何在SpringREST控制器中获取原始JSON主体?
下面的API接受来自客户端的json字符串,并将其映射到电子邮件对象中。如何将请求正文(Java 如何在SpringREST控制器中获取原始JSON主体?,java,spring,spring-boot,spring-mvc,Java,Spring,Spring Boot,Spring Mvc,下面的API接受来自客户端的json字符串,并将其映射到电子邮件对象中。如何将请求正文(电子邮件)作为原始字符串获取?(我需要原始字符串和键入版本的email参数) 附:本问题并非重复: @PostMapping(value=“/mailssender”) 公共响应发送邮件(@RequestBody-Email){ //... 返回新的响应状态(HttpStatus.OK); } Spring在后面使用Jackson,您可以使用它将其序列化为字符串。像这样: @Autowired private
电子邮件
)作为原始字符串获取?(我需要原始字符串和键入版本的email
参数)
附:本问题并非重复:
@PostMapping(value=“/mailssender”)
公共响应发送邮件(@RequestBody-Email){
//...
返回新的响应状态(HttpStatus.OK);
}
Spring在后面使用Jackson,您可以使用它将其序列化为字符串。像这样:
@Autowired private ObjectMapper jacksonMapper;
@PostMapping(value = "/mailsender")
public ResponseEntity<Void> sendMail(@RequestBody Email email) {
//...
log.info("Object as String: " + jacksonMapper.writeValueAsString(email));
return new ResponseEntity<>(HttpStatus.OK);
}
@Autowired私有对象映射器jacksonapper;
@PostMapping(value=“/mailsender”)
公共响应发送邮件(@RequestBody-Email){
//...
log.info(“对象为字符串:+jacksonMapper.writeValueAsString(电子邮件));
返回新的响应状态(HttpStatus.OK);
}
您可以使用GSON库创建字符串类型的json
Gson-Gson=new-Gson();
@后期映射(value=“/endpoint”)
公共响应行动控制器(@RequestBody Car){
//...
log.info(“对象为字符串:+this.gson.toJson(car));
返回新的响应状态(HttpStatus.OK);
}
关于这个问题,我并没有完全了解,但我会尽我所能回答。好,
如果要获取请求正文,请执行以下操作:
- 正如你在这里所说,我已经写下了如何做到这一点。如果出现问题,可能是您发送了错误的json,或者您在
电子邮件中看到的类型不合适。也许你的请求来自url过滤器
- 第二种方法是这样尝试:
private final ObjectMapper mapper = new ObjectMapper(); @PostMapping(value = "/mailsender") public ResponseEntity<Void> sendMail(HttpServletRequest req) { // read request body InputStream body = req.getInputStream(); byte[] result = ByteStreams.toByteArray(body); String text =new String(result,"UTF-8"); //convert to object Email email = mapper.readValue(body, Email .class); return new ResponseEntity<>(HttpStatus.OK); }
private final ObjectMapper mapper=new ObjectMapper(); @PostMapping(value=“/mailsender”) 公共响应发送邮件(HttpServletRequest请求){ //读取请求正文 InputStream body=req.getInputStream(); 字节[]结果=ByTestStreams.toByteArray(正文); 字符串文本=新字符串(结果为“UTF-8”); //转换为对象 Email Email=mapper.readValue(body,Email.class); 返回新的响应状态(HttpStatus.OK); }
如果要将对象转换为json字符串,可以使用多种方法,如清单2所示
1. **Taking string as the paramater**,
@PostMapping(value = "/mailsender")
public ResponseEntity<Void> sendMail(@RequestBody String email) {
//... the email is the string can be converted to Json using new JSONObject(email) or using jackson.
return new ResponseEntity<>(HttpStatus.OK);
}
2. **Using Jackson**
@PostMapping(value = "/mailsender")
public ResponseEntity<Void> sendMail(@RequestBody Email email) {
//...
ObjectMapper mapper = new ObjectMapper();
String email = mapper.writeValueAsString(email); //this is in string now
return new ResponseEntity<>(HttpStatus.OK);
}
1**以字符串为参数**,
@PostMapping(value=“/mailsender”)
public ResponseEntity sendMail(@RequestBody String-email){
//…电子邮件是可以使用新的JSONObject(电子邮件)或jackson将字符串转换为Json的字符串。
返回新的响应状态(HttpStatus.OK);
}
2. **使用Jackson**
@PostMapping(value=“/mailsender”)
公共响应发送邮件(@RequestBody-Email){
//...
ObjectMapper mapper=新的ObjectMapper();
String email=mapper.writeValueAsString(email);//现在是字符串
返回新的响应状态(HttpStatus.OK);
}
您是否尝试过使用toString或StringBuilder方法?确切地说,为什么它不是重复的?@chrylis小心光学-另一个问题是只获取原始字符串,而不关心输入(映射)的字符串版本parameter@kalpajagrawalla我想这会造成一些开销,由于我们必须将对象转换回JSON字符串,您是否尝试将两者都转换为JSON字符串?第一种方法是我现在使用的解决方案,但我希望Spring提供更好的方法来解决此问题。第一种方法:电子邮件是一个编码的表单字符串,由Spring修改
1. **Taking string as the paramater**,
@PostMapping(value = "/mailsender")
public ResponseEntity<Void> sendMail(@RequestBody String email) {
//... the email is the string can be converted to Json using new JSONObject(email) or using jackson.
return new ResponseEntity<>(HttpStatus.OK);
}
2. **Using Jackson**
@PostMapping(value = "/mailsender")
public ResponseEntity<Void> sendMail(@RequestBody Email email) {
//...
ObjectMapper mapper = new ObjectMapper();
String email = mapper.writeValueAsString(email); //this is in string now
return new ResponseEntity<>(HttpStatus.OK);
}