在点击REST控制器POST方法发送“请求正文”

时间:2016-05-24 06:10:34

标签: java json postman spring-restcontroller

这是Rest Controller Service签名

@RequestMapping(value = "/getFilteredReport", method = RequestMethod.POST)
 public void getFilteredReport(@RequestBody FilteredReportVO filteredReportVO,HttpServletRequest request,HttpServletResponse response) {

现在,下面是我发送的JSON结构

{
"filterAttributesFactory":{
"930000":{
"metaDataId":930000,
"displayText":"Select Category",
"attributeType":211009,
"userInputValue":null,
"dropDownoptions":null,
"isMandatory":false,
"isDropDown":false,
"defaultValue":null,
"isdefaultValue":false,
"constraintId":null
},
"930001":{
"metaDataId":930001,
"displayText":"Item Status",
"attributeType":211005,
"userInputValue":null,
"dropDownoptions":{
"157005":"FC - fake scrap",
 "157006":"FH - firearm hold",
 "157008":"IN - inventory"
  },
  "isMandatory":false,
  "isDropDown":true,
  "defaultValue":null,
  "isdefaultValue":false,
  "constraintId":213007
  }
 },
"reportId":132030,
"location":1202
}

以下是 FilteredReportVO POJO

public class FilteredReportVO {

private HashMap<Integer,FilterAttributeVO> filterAttributesFactory=new HashMap<Integer,FilterAttributeVO>();

private Integer reportId;

private Long location; .....GETTERS and setters below

FilterAttributeVO pojo结构在下面..

public class FilterAttributeVO {
Integer metaDataId;
//String elementName;
String displayText;
Integer attributeType;
Object userInputValue;
Map<Integer,String> dropDownoptions;
Boolean isMandatory=false;;
Boolean isDropDown=false;
Object defaultValue;
Boolean isdefaultValue=false;
Integer constraintId=null;...Getters n setters..

我通过POSTMAN插件点击服务。 得到错误:

“由于语法错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求”。

在POSTMAN中的FYI我将JSON结构放在“Body”中,选择“raw”,输入“JSON(application / json)”。

注意我在 FilteredAttributeVO 对象 类型属性 userInputValue defaultValue >。 R我们允许保留对象类型吗?

这里的问题在哪里?

2 个答案:

答案 0 :(得分:1)

Input Json is not valid 如果您看到使用JSONlint输入JSON的屏幕截图,则您的json无效。请修复您的json对象并使用jsonlint验证它

你可以尝试在你的测试中使用以下代码来解决这个问题,因为Spring内部使用了Jackson库

ObjectMapper mapper = new ObjectMapper();
Staff obj = mapper.readValue(jsonInString, FilteredReportVO.class);

如果这样可以正常使用,那么它们应该与您的邮递员RequestBody准备有关,否则您将获得详细的堆栈跟踪:)

答案 1 :(得分:1)

问题在于 FilteredReportVO POJO。我正在设置属性的值&#34; location &#34;和&#34; reportId &#34;通过构造函数。 这两个属性没有定义setter方法

这是我的不好,如果我会发布完整的POJO课程,你们一定已经弄明白了。无论如何,谢谢大家的帮助