我有一个项目,我使用Spring MVC + Jackson来构建REST服务.假设我有以下java实体
public class MyEntity {
private Integer id;
private boolean aBoolean;
private String aVeryBigString;
//getter & setters
}
Run Code Online (Sandbox Code Playgroud)
有时候,我只是想更新布尔值,我不认为用更大的字符串发送整个对象只是为了更新一个简单的布尔值.所以,我考虑过使用PATCH HTTP方法只发送需要更新的字段.所以,我在我的控制器中声明了以下方法:
@RequestMapping(method = RequestMethod.PATCH)
public void patch(@RequestBody MyVariable myVariable) {
//calling a service to update the entity
}
Run Code Online (Sandbox Code Playgroud)
问题是:我如何知道哪些字段需要更新?例如,如果客户端只想更新布尔值,我将得到一个空的"aVeryBigString"对象.我怎么知道用户只想更新布尔值,但不想清空字符串?
我通过构建自定义URL"解决"了这个问题.例如,以下URL:POST/myentities/1/aboolean/true将映射到只允许更新布尔值的方法.此解决方案的问题在于它不符合REST.我不希望100%兼容REST,但我不愿意提供自定义URL来更新每个字段(特别是考虑到当我想更新多个字段时它会导致问题).
另一个解决方案是将"MyEntity"拆分为多个资源并只更新这些资源,但我觉得它没有意义:"MyEntity" 是一个普通资源,它不是由其他资源组成的.
那么,有一种解决这个问题的优雅方式吗?
我是一个新的程序员,我有一些问题,我已经浏览了一个图片到我的GUI(并在文本框中设置路径),它显示在标签上,但标签尺寸设置只有100,100而图片很多更大,所以当我打开/显示它到标签它被裁剪,无论如何,它是否自动调整大小到标签大小?下面是我在浏览按钮和打开对话框上的逻辑代码,请任何人告诉我我错在哪里..
public class ImagePath extends javax.swing.JFrame {
private JPanel contentPane;
JLabel jLabel1;
String s2;
File targetFile;
BufferedImage targetImg;
public ImagePath() {
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser jFileChooser1 = new JFileChooser();
int state = jFileChooser1.showOpenDialog(new JFrame());
jTextField1.setText("");
if (state == JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(new JFrame(), "hii");
File file = jFileChooser1.getSelectedFile();
s2 = file.toString();
jTextField1.setText(s2);
jLabel1 = new JLabel();
jLabel1.setName(s2);
jLabel1.setLocation(50, 50);
jLabel1.setSize(300, 300);
add(jLabel1);
BufferedImage bi1;
try {
bi1 = ImageIO.read(file);
ImageIcon icon1 = new ImageIcon(bi1);
jLabel1.setIcon(icon1);
Image img …
Run Code Online (Sandbox Code Playgroud)