Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端发送的请求语法不正确,请列出复选框_Java_Spring_Hibernate_Jsp_Tomcat7 - Fatal编程技术网

Java 客户端发送的请求语法不正确,请列出复选框

Java 客户端发送的请求语法不正确,请列出复选框,java,spring,hibernate,jsp,tomcat7,Java,Spring,Hibernate,Jsp,Tomcat7,我在提交表单时遇到错误: 错误400:客户端发送的请求在语法上不正确 我在带有Servlet3.0的Tomcat7中使用Hibernate4、Spring3和JSP页面 我得到了一个扩展BaseEntity的Order类(BaseEntity得到了自动生成的uuid成员): 但它永远不会到达那里 我向wireshark查询了HTML POST请求中发送的内容,得到了以下信息: selectedAdditionalOptions=ae396f42-843c-454d-a573-85e71c367

我在提交表单时遇到错误: 错误400:客户端发送的请求在语法上不正确

我在带有Servlet3.0的Tomcat7中使用Hibernate4、Spring3和JSP页面

我得到了一个扩展BaseEntity的Order类(BaseEntity得到了自动生成的uuid成员):

但它永远不会到达那里

我向wireshark查询了HTML POST请求中发送的内容,得到了以下信息:

 selectedAdditionalOptions=ae396f42-843c-454d-a573-85e71c36709d&selectedAdditionalOptions=962e0766-5e56-4490-bc50-d4f41272c77e&_selectedAdditionalOptions=on
我在log4j文件中发现以下错误:

013-11-04 20:46:56 DEBUG DispatcherServlet:823 - DispatcherServlet with name 'appServlet' processing POST request for [/menuapp/order/create]
2013-11-04 20:46:56 DEBUG RequestMappingHandlerMapping:220 - Looking up handler method for path /order/create
2013-11-04 20:46:56 DEBUG RequestMappingHandlerMapping:227 - Returning handler method [public java.lang.String com.openu.menuapp.controller.OrderController.save(org.springframework.ui.Model,com.openu.menuapp.entity.Order)]
2013-11-04 20:46:56 DEBUG DefaultListableBeanFactory:246 - Returning cached instance of singleton bean 'orderController'
2013-11-04 20:46:56 DEBUG BeanUtils:443 - No property editor [com.openu.menuapp.entity.AdditionalOptionEditor] found for type com.openu.menuapp.entity.AdditionalOption according to 'Editor' suffix convention
2013-11-04 20:46:56 DEBUG ExceptionHandlerExceptionResolver:132 - Resolving exception from handler [public java.lang.String com.openu.menuapp.controller.OrderController.save(org.springframework.ui.Model,com.openu.menuapp.entity.Order)]: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'order' on field 'selectedAdditionalOptions': rejected value [962e0766-5e56-4490-bc50-d4f41272c77e]; codes [typeMismatch.order.selectedAdditionalOptions,typeMismatch.selectedAdditionalOptions,typeMismatch.java.util.Set,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [order.selectedAdditionalOptions,selectedAdditionalOptions]; arguments []; default message [selectedAdditionalOptions]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Set' for property 'selectedAdditionalOptions'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.openu.menuapp.entity.AdditionalOption] for property 'selectedAdditionalOptions[0]': no matching editors or conversion strategy found]
2013-11-04 20:46:56 DEBUG ResponseStatusExceptionResolver:132 - Resolving exception from handler [public java.lang.String com.openu.menuapp.controller.OrderController.save(org.springframework.ui.Model,com.openu.menuapp.entity.Order)]: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'order' on field 'selectedAdditionalOptions': rejected value [962e0766-5e56-4490-bc50-d4f41272c77e]; codes [typeMismatch.order.selectedAdditionalOptions,typeMismatch.selectedAdditionalOptions,typeMismatch.java.util.Set,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [order.selectedAdditionalOptions,selectedAdditionalOptions]; arguments []; default message [selectedAdditionalOptions]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Set' for property 'selectedAdditionalOptions'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.openu.menuapp.entity.AdditionalOption] for property 'selectedAdditionalOptions[0]': no matching editors or conversion strategy found]
2013-11-04 20:46:56 DEBUG DefaultHandlerExceptionResolver:132 - Resolving exception from handler [public java.lang.String com.openu.menuapp.controller.OrderController.save(org.springframework.ui.Model,com.openu.menuapp.entity.Order)]: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'order' on field 'selectedAdditionalOptions': rejected value [962e0766-5e56-4490-bc50-d4f41272c77e]; codes [typeMismatch.order.selectedAdditionalOptions,typeMismatch.selectedAdditionalOptions,typeMismatch.java.util.Set,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [order.selectedAdditionalOptions,selectedAdditionalOptions]; arguments []; default message [selectedAdditionalOptions]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Set' for property 'selectedAdditionalOptions'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.openu.menuapp.entity.AdditionalOption] for property 'selectedAdditionalOptions[0]': no matching editors or conversion strategy found]
2013-11-04 20:46:56 DEBUG DispatcherServlet:999 - Null ModelAndView returned to DispatcherServlet with name 'appServlet': assuming HandlerAdapter completed request handling
2013-11-04 20:46:56 DEBUG DispatcherServlet:966 - Successfully completed request
我无法回答自己的问题,所以我在这里写下答案:


好的,问题是Uuid作为字符串转换成AdditionalOption对象

因此,我将以下绑定添加到我的控制器:

@Autowired
private AdditionalOptionConvertor additionalOptionConvertor;

@InitBinder
public void initBinder(WebDataBinder binder) {
     binder.registerCustomEditor(AdditionalOption.class, additionalOptionConvertor);
}
@Autowired
private AdditionalOptionConvertor additionalOptionConvertor;

@InitBinder
public void initBinder(WebDataBinder binder) {
     binder.registerCustomEditor(AdditionalOption.class, additionalOptionConvertor);
}
当AdditionalOptionConvertor是一个自动连接的服务时,如下所示:

@Entity
@Table (name = "additional_options")
public class AdditionalOption extends BaseEntity {

    @Column (nullable = false)
    protected String name;

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "selectedAdditionalOptions")
    private Set<Order> orders = new HashSet<Order>();

    /**
     * Constructor
     */
    public AdditionalOption()
    {
        super("");
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
}
@RequestMapping(value = "/create", method = RequestMethod.POST)
        public String save(Model model, @ModelAttribute Order order) {
        orderService.saveOrUpdate(order);
            model.addAttribute("saved", "success");
            return "order";
        }
@Service("additionalOptionConvertor")
public class AdditionalOptionConvertor extends BaseConvertor<AdditionalOption>
{
    @Autowired
    protected AdditionalOptionService service;

    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        baseService = service;
        super.setAsText(text);
    }

}
public abstract class BaseConvertor<T extends BaseEntity> extends PropertyEditorSupport
{

    protected BaseEntityService baseService;

    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        T value =  baseService.findByUUID(text);
        setValue(value);
    }

    @SuppressWarnings("unchecked")
    @Override
    public String getAsText()
    {
        T d = (T) getValue();
        return d != null ? String.valueOf(d.getUuid()) : "";
    }   
}
@Service("additionalOptionConvertor")
public class AdditionalOptionConvertor extends BaseConvertor<AdditionalOption>
{
    @Autowired
    protected AdditionalOptionService service;

    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        baseService = service;
        super.setAsText(text);
    }

}
public abstract class BaseConvertor<T extends BaseEntity> extends PropertyEditorSupport
{

    protected BaseEntityService baseService;

    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        T value =  baseService.findByUUID(text);
        setValue(value);
    }

    @SuppressWarnings("unchecked")
    @Override
    public String getAsText()
    {
        T d = (T) getValue();
        return d != null ? String.valueOf(d.getUuid()) : "";
    }   
}
@服务(“附加选项转换器”)
公共类附加选项转换器扩展BaseConvertor


感谢帮助人员

好的,问题是Uuid作为字符串转换为AdditionalOption对象

因此,我将以下绑定添加到我的控制器:

@Autowired
private AdditionalOptionConvertor additionalOptionConvertor;

@InitBinder
public void initBinder(WebDataBinder binder) {
     binder.registerCustomEditor(AdditionalOption.class, additionalOptionConvertor);
}
@Autowired
private AdditionalOptionConvertor additionalOptionConvertor;

@InitBinder
public void initBinder(WebDataBinder binder) {
     binder.registerCustomEditor(AdditionalOption.class, additionalOptionConvertor);
}
当AdditionalOptionConvertor是一个自动连接的服务时,如下所示:

@Entity
@Table (name = "additional_options")
public class AdditionalOption extends BaseEntity {

    @Column (nullable = false)
    protected String name;

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "selectedAdditionalOptions")
    private Set<Order> orders = new HashSet<Order>();

    /**
     * Constructor
     */
    public AdditionalOption()
    {
        super("");
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
}
@RequestMapping(value = "/create", method = RequestMethod.POST)
        public String save(Model model, @ModelAttribute Order order) {
        orderService.saveOrUpdate(order);
            model.addAttribute("saved", "success");
            return "order";
        }
@Service("additionalOptionConvertor")
public class AdditionalOptionConvertor extends BaseConvertor<AdditionalOption>
{
    @Autowired
    protected AdditionalOptionService service;

    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        baseService = service;
        super.setAsText(text);
    }

}
public abstract class BaseConvertor<T extends BaseEntity> extends PropertyEditorSupport
{

    protected BaseEntityService baseService;

    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        T value =  baseService.findByUUID(text);
        setValue(value);
    }

    @SuppressWarnings("unchecked")
    @Override
    public String getAsText()
    {
        T d = (T) getValue();
        return d != null ? String.valueOf(d.getUuid()) : "";
    }   
}
@Service("additionalOptionConvertor")
public class AdditionalOptionConvertor extends BaseConvertor<AdditionalOption>
{
    @Autowired
    protected AdditionalOptionService service;

    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        baseService = service;
        super.setAsText(text);
    }

}
public abstract class BaseConvertor<T extends BaseEntity> extends PropertyEditorSupport
{

    protected BaseEntityService baseService;

    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        T value =  baseService.findByUUID(text);
        setValue(value);
    }

    @SuppressWarnings("unchecked")
    @Override
    public String getAsText()
    {
        T d = (T) getValue();
        return d != null ? String.valueOf(d.getUuid()) : "";
    }   
}
@服务(“附加选项转换器”)
公共类附加选项转换器扩展BaseConvertor


感谢帮助者

从服务器角度看,没有足够的信息来了解您是否发送了正确的帖子,因为这就是HTTP 400的含义。。。请求不正确。。我建议您直接通过HTTP测试仪发送您从wireshark收到的请求,以查看您的语法是否正确。嗨,我添加了服务器日志。