+-

我正在使用 Spring MVC并尝试返回 JSONObject作为来自控制器的响应.我已经用@ResponseBody注释了该方法,以便将控制器返回的JSONObject放入ResponseBody中.
这是我的控制器:
这是我的控制器:
@GetMapping(value="/student/{roll}",produces="application/json")
@ResponseBody
private JSONObject getStudentDetails(@PathVariable(value="roll") String roll) {
JSONObject response = new JSONObject();
Student student = studentDAO.getStudent(roll);
response.put("firstName",student.getFirstName());
response.put("lastName",student.getLastName());
response.put("roll",student.getRoll());
response.put("email",student.getEmail());
response.put("course",student.getCourse());
response.put("stream",student.getStream());
response.put("year",student.getYear());
response.put("gender",student.getGender());
String date = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = String.valueOf(df.parse(student.getSignUpDate()).getTime());
} catch (ParseException e) {
e.printStackTrace();
}
response.put("signUpDate", date);
System.out.println("Response Body::::: "+response.toString());
return response;
}
有效的响应应如下所示:
{
"firstName": "John",
"lastName": "Doe",
"gender": "M",
"stream": "cse",
"year": 3,
"roll": "2013BT2011",
"course": "btech",
"signUpDate": "1476224877000",
"email": "[email protected]"
}
但是我得到这个:
{
"map": {
"firstName": "John",
"lastName": "Doe",
"gender": "M",
"stream": "cse",
"year": 3,
"roll": "2013BT2011",
"course": "btech",
"signUpDate": "1476224877000",
"email": "[email protected]"
}
}
在这里,我的控制器返回的对象被包装到一个地图对象中,然后由Spring返回.
有人可以告诉我这是怎么回事.
任何帮助,将不胜感激. 🙂
最佳答案
spring mvc使用jackson databind将对象序列化为JSON /反序列化JSON为对象.
因此,不需要使用@ResponseBody返回JSONObject.
有一些方法:
因此,不需要使用@ResponseBody返回JSONObject.
有一些方法:
定义一个具有需求字段的类(视图对象),然后定义new,填充一个实例并返回它.
使用java.util.Map.因此,您的代码将如下所示:
@GetMapping(value="/student/{roll}",produces="application/json")
@ResponseBody
private Map<String, Object> getStudentDetails(@PathVariable(value="roll") String roll) {
Map<String, Object> response = new HashMap<>();
Student student = studentDAO.getStudent(roll);
response.put("firstName",student.getFirstName());
response.put("lastName",student.getLastName());
response.put("roll",student.getRoll());
response.put("email",student.getEmail());
response.put("course",student.getCourse());
response.put("stream",student.getStream());
response.put("year",student.getYear());
response.put("gender",student.getGender());
String date = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = String.valueOf(df.parse(student.getSignUpDate()).getTime());
} catch (ParseException e) {
e.printStackTrace();
}
response.put("signUpDate", date);
System.out.println("Response Body::::: "+response.toString());
return response;
}
您可以在Student类(https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations)上返回带有正确Jackson注释的Student(PO).如果要限制返回的字段,可以添加JsonView批注.
public class Student {
public static class Response {}
private String firstName;
private String lastName;
private String roll;
private String email;
private String course;
private String stream;
private String year;
private String gender;
private Date getSignUpDate;
@JsonView(Response.class)
public String getFirstName() {
return firstName;
}
@JsonView(Response.class)
public String getLastName() {
return lastName;
}
@JsonView(Response.class)
public String getRoll() {
return roll;
}
@JsonView(Response.class)
public String getEmail() {
return email;
}
@JsonView(Response.class)
public String getCourse() {
return course;
}
@JsonView(Response.class)
public String getStream() {
return stream;
}
@JsonView(Response.class)
public String getYear() {
return year;
}
@JsonView(Response.class)
public String getGender() {
return gender;
}
@JsonView(Response.class)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
public Date getGetSignUpDate() {
return getSignUpDate;
}
/// setters are not written.
}
public class StudentCtl {
@GetMapping(value="/student/{roll}",produces="application/json")
@ResponseBody
@JsonView(Student.Response.class)
private Map<String, Object> getStudentDetails(@PathVariable(value="roll") String roll) {
return studentDAO.getStudent(roll);
}
}
点击查看更多相关文章
转载注明原文:java-Spring返回带有@ResponseBody的修改后的JSONObject - 乐贴网