2014-09-10 6 views
0
//Entity 
public class MyEntity { 
    private Double amount; 
    public Double getAmount() { return this.amount; } 
    public void setAmount(Double value) { this.amount = value; } 
} 

//Controller 
@RequestMapping(value="/save") 
public void save(MyEntity a) { 
    //save to db 
} 

// 
<input name="amount" value="1,252.00" /> 

Когда я встреча на высшем уровне сформировать это держать возвращение 400 - Bad Request .. и я узнаю, что это потому, что весна не в состоянии преобразовать отформатированный номер в два раза. Как преобразовать запрос до установки в MyEntitySpring @ModelAttribute Преобразовать отформатирован номер Удвоить

ответ

1

Я реализует класс преобразования, который расширяет CustomNumberEditor

public class MyCustomNumberEditor extends CustomNumberEditor { 
    public void MyCustomNumberEditor(Class numberClass, boolean allowEmpty) { 
     this.numberClass = numberClass; 
     this.allowEmpty = allowEmpty; 
    } 

    @Override 
    public void setAsText(String text) throws IllegalArgumentException { 
     if (this.allowEmpty && !StringUtils.hasText(text)) { 
     // Treat empty String as null value. 
     setValue(null); 
     } 
     else { 
     try { 
      setValue(Convert.to(this.numberClass, text)); 
     } 
     catch (Exception ex) { 
      throw new IllegalArgumentException("Could not parse date: " + ex.getMessage(), ex); 
     } 
     } 
    } 
} 

и вставьте их в контроллер

@InitBinder 
public void initDataBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Double.class, new MyCustomNumberEditor(Double.class)); 
} 
0

Try следующее:

public class MyEntity { 
    private Double amount; 
    public Double getAmount() { return this.amount; } 
    public void setAmount(Double value) { this.amount = value; } 
} 

//Controller 
@RequestMapping(value="/save") 
public void save(HttpServletRequest request) { 
    Double doubleVal=Double.parseDouble(request.getParameter("amount")); 
    MyEntity myEnt=new MyEntity(); 
    myEnt.setAmount(doubleVal); 
    //save to db 
} 

// 
<input name="amount" value="1,252.00" /> 

Как вы не посылаете весь атрибут модели, но только значение, это должно работать для вас.

В качестве альтернативы вы можете указать @ModelAttrubute в своей весенней форме и поймать его на методе .

+0

Там нет Спринг решение? '@ Converter' или' @ Binder', 'MyEntity' может иметь много свойств. – Bear0x3f

+0

@BooBooBear [это] (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html) может вам помочь. –

Смежные вопросы