前端传入后端对象中有JSON数据,后端想用String该如何接收?
VO
对你而言, 这整个数据都可以用 String 接收, 然后 再将 String 的 json串 转 java pojo对象;
当然 后端其实可以直接定义 java pojo对象,前端 传的时候,直接把 js对象 转 json数据传后台即可
前端传递的时候先JSON.stringify(obj)转为字符串,后端接收的时候在解析为json
@RequestMapping(value = "/testJson5",method = {RequestMethod.POST})
@ResponseBody
public String testJson5(@RequestBody String user) throws IOException {
System.out.println(user); // {"username":"hahah","password":"123456"}
ObjectMapper mapper = new ObjectMapper();
User user1 = mapper.readValue(user, User.class);
System.out.println(user1.getUsername());//hahah
System.out.println(user1.getPassword());//123456
return "aaaa";
}
对于该问题,可以使用常见的Json库,比如Jackson、FastJson等进行解析。以Jackson为例,具体实现步骤如下:
1.在项目中导入Jackson的相关依赖,如果使用Maven项目可以在pom.xml中添加如下依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
2.在Controller中使用@RequestBody注解接收前端传来的Json数据,并将其转换为Java对象。例如:
@PostMapping("/test")
@ResponseBody
public String test(@RequestBody String jsonStr) throws JsonProcessingException {
// 将Json字符串转换为Java对象
ObjectMapper objectMapper = new ObjectMapper();
MyObject obj = objectMapper.readValue(jsonStr, MyObject.class);
// 对Java对象的操作
// ...
// 将Java对象转换为Json字符串
String resultJson = objectMapper.writeValueAsString(obj);
return resultJson;
}
其中,MyObject类是用于描述前端传来的Json数据的Java类,可以根据Json数据的结构定义对应的MyObject类。如果Json数据的结构比较复杂,可以使用嵌套的自定义类来描述。
需要注意的是,在尝试将Json字符串转换为Java对象(即使用objectMapper.readValue(jsonStr, MyObject.class))时,如果Json字符串中有一些属性在Java对象中没有对应的属性,会抛出UnrecognizedPropertyException异常。这种情况可以通过在对象中添加@JsonProperty注解来解决,例如:
public class MyObject {
@JsonProperty("name")
private String userName;
// ...
}
以上就是使用Jackson库对前端传来的Json数据进行解析的代码实现步骤。如果使用其他的Json库,大体的实现方式应该类似。如果实现过程中有其他问题,可以再行搜索相关资料解决。